关于静态资源打包上线后404的解决办法

6,787次阅读
没有评论

共计 896 个字符,预计需要花费 3 分钟才能阅读完成。

关于静态资源打包上线后 404 的解决办法

问题详情

key value
框架 uniapp+vue3+ts+vite
环境 node 20.10.0 pnpm

部署测试环境加入上下文后静态资源报 404 错误,排查后发现,img 标签中 src 属性值用变量形式引入的本地资源都找不到了,线上资源以及写死的串形式是可以找到的。

排查原因

vite 文档里有段话引起我的注意:

public 目录(https://cn.vitejs.dev/guide/assets.html#the-public-directory)

如果你有下列这些资源:

  • 不会被源码引用(例如 robots.txt
  • 必须保持原有文件名(没有经过 hash)
  • …或者你压根不想引入该资源,只是想得到其 URL。

那么你可以将该资源放在指定的 public 目录中,它应位于你的项目根目录。该目录中的资源在开发时能直接通过 / 根路径访问到,并且打包时会被完整复制到目标目录的根目录下。

目录默认是 /public,但可以通过 publicDir 选项 来配置。

请注意:

  • 引入 public 中的资源永远应该使用根绝对路径 —— 举个例子,public/icon.png 应该在源码中被引用为 /icon.png
  • public 中的资源不应该被 JavaScript 文件引用。

解决办法

  1. 能用静态字符串方式引入的尽量用这种方式

  2. 后端返回的线上资源 (带 http 的) 不用担心以变量形式引入后丢失问题

  3. 若不免不了用变量方式引入静态资源,就类似组件一样先 import 引入再赋值到相应位置

    例如:

    
    import shengHeZhong from '@/assets/static/check/1.png'
    
    const checkUrl = computed(() => {
      
      switch (props.userStaus) {
        case 1:
          return shengHeZhong
      }
      
      
      
      
      
    })
    

但,此方法在测试环境能用了,上了我们正式环境叒找不到文件了【菜菜流泪.jpg】,此时我的友友找到新方法,在此感谢她!

new URL('@/assets/static/check/1.png',import.meta.url).href

原文地址: 关于静态资源打包上线后 404 的解决办法

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-10-27发表,共计896字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)