• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
可樂_Thompson
博客园    首页    新随笔    联系   管理    订阅  订阅
vue静态资源放在src/assets与static目录下的区别

assets

为了回答这个问题,我们首先需要了解Webpack如何处理静态资产。在 *.vue组件中,所有模板和CSS都会被 vue-html-loader 及 css-loader 解析,并查找资源URL。例如,在 <img src="./logo.png"> 和 background: url(./logo.png) 中,"./logo.png"是相对的资源路径,将由Webpack解析为模块依赖。

因为 logo.png 不是 JavaScript,当被视为模块依赖时,需要使用 url-loader 和 file-loader处理它。vue-cli 的 webpack 脚手架已经配置了这些 loader,因此可以使用相对/模块路径。

由于这些资源可能在构建过程中被内联/复制/重命名,所以它们基本上是源代码的一部分。这就是为什么建议将Webpack 处理的静态资源放在 /src 目录中和其它源文件放一起的原因。事实上,甚至不必把它们全部放在 /src/assets:可以用模块/组件的组织方式来使用它们。例如,可以在每个放置组件的目录中存放静态资源。

static

相比之下,static/ 目录下的文件并不会被 Webpack 处理:它们会直接被复制到最终目录(默认是dist/static)下。必须使用绝对路径引用这些文件,这是通过在 config.js 文件中的 build.assetsPublicPath 和 build.assetsSubDirectory 连接来确定的。

任何放在 static/ 中文件需要以绝对路径的形式引用:/static/[filename]。如果更改 assetSubDirectory 的值为 assets,那么路径需改为 /assets/[filename]。

如果src的值是一个变量,放在staic下能访问到图片,放在assets下访问不到。如果是一个字符串常量,static和assets下都可以访问到。

分析:官方说,在 *.vue组件中,所有模板和CSS都会被 vue-html-loader 及 css-loader 解析,并查找资源URL。所以对应的资源如果是个字符串常量,在编译期就已经被解析为Base64与代码融合为一体。而如果src对应的是个变量,只有在运行期才会被解析,这时候就访问不到assets目录下的资源了。

结论:当资源对应的是变量时,资源放在static下。第三方的类库的资源也放在static下。其他时候个人感觉相同。

应用: 在src/components/ele.vue中,data数据里引入文件数据

 

imgsUrl:[
          {src:'../static/imgs/02.jpg'},
          {src:'./static/imgs/03.jpg'},
          {src:'http://www.pptok.com/wp-content/uploads/2012/08/xunguang-4.jpg'}
     ]

 

第一行为相对路径,第二行为使用绝对URL引用./static/[filename],第三行为网上图片路径。

建议做法为:绝对URL引用./static/[filename]

 

补充:

 

    在原来的绝对URL引用/static/[filename]基础上,在最之前添加了一个点.,因为vue项目打包后,如果不加.,无法正确获取图片等静态资源路径。

 

posted on 2020-03-26 10:21  可樂_Thompson  阅读(3117)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3