vue2.0 资源文件assets和static的区别详解


Posted in Javascript onApril 08, 2018

资源文件处理

在我们的项目结构里,有两个资源文件的路径,分别是:src/assets 和 static/。那这两个到底有什么区别呢?

Webpacked 资源

为了回答这个问题,我们首先需要理解webpack是怎样处理静态资源的。在*.vue组件中,所有的templates和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进行处理。 该模板已经配置好了这些loaders,所以你能够使用相对/模块路径时不需要担心部署的问题。由于这些资源可能在构建的时候被内联/复制/重命名, 所以它们从本质上来说是你源码的一部分。这就是为什么我们建议将交由webpack处理的静态资源和其它源文件一样放在/src路径下面。实际上,你甚至不需要把它们全都放在/src/assets路径下:你可以基于模块/组件的使用来组织文件结构。例如,你可以把每个组件和属于它的静态资源放在它自己的目录下。

资源处理规则

相对URL, e.g. ./assets/logo.png 将会被解释成一个模块依赖。它们会被一个基于你的Webpack输出配置自动生成的URL替代。没有前缀的URL, e.g. assets/logo.png 将会被看成相对URL,并且转换成./assets/logo.png

前缀带~的URL 会被当成模块请求, 类似于require(‘some-module/image.png'). 如果你想要利用Webpack的模块处理配置,就可以使用这个前缀。例如,如果你有一个对于assets的路径解析,你需要使用 <img src="~assets/logo.png"> 来确保解析是对应上的。相对根目录的URL, e.g. /assets/logo.png 是不会被处理的

在 Javascript中获取资源路径

为了能让Webpack返回正确的资源路径,你需要使用require(‘./relative/path/to/file.jpg'),由file-loader进行解析,然后返回处理过的URL。例如:

computed: {
 background () {
  return require('./bgs/' + this.id + '.jpg')
 }
}

注意上面的例子,在最终的构建时将会包含./bgs/路径下的所有图片 这是因为Webpack不能猜出来在运行时会用到其中的哪个,所以会包含所有的。

“真实的” 静态资源

作为对比,在static/下的文件都不会被Webpack处理:它们使用相同的文件名,直接拷贝到最终的路径。你必须使用绝对路径来引用这些文件,取决于在config.js里面加入的build.assetsPublicPath 和 build.assetsSubDirectory。

举个例子,下面的默认值是:

// config/index.js
module.exports = {
 // ...
 build: {
  assetsPublicPath: '/',
  assetsSubDirectory: 'static'
 }
}

所有放在 static/目录下的文件都应该是使用绝对URL/static/[filename]引用的。如果你将assetSubDirectory的值改成assets, 那么这些URL就会被变成 /assets/[filename]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript document.execCommand() 常用解析
Dec 14 Javascript
javascript getElementsByClassName函数
Apr 01 Javascript
jquery+json 通用三级联动下拉列表
Apr 19 Javascript
javascript 词法作用域和闭包分析说明
Aug 12 Javascript
jQuery.autocomplete 支持中文输入(firefox)修正方法
Mar 10 Javascript
Js sort排序使用方法
Oct 17 Javascript
JavaScript基础语法让人疑惑的地方小结
May 23 Javascript
js日期时间补零的小例子
Mar 05 Javascript
vue自定义指令directive实例详解
Jan 17 Javascript
写一个Vue Popup组件
Feb 25 Javascript
vue-i18n结合Element-ui的配置方法
May 20 Javascript
微信小程序实现拍照画布指定区域生成图片
Jul 18 Javascript
通过vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题
Apr 08 #Javascript
vuex 项目结构目录及一些简单配置介绍
Apr 08 #Javascript
JS求Number类型数组中最大元素方法
Apr 08 #Javascript
angular2模块和共享模块详解
Apr 08 #Javascript
vue下拉列表功能实例代码
Apr 08 #Javascript
详解Vue-cli webpack移动端自动化构建rem问题
Apr 07 #Javascript
vue-cli开发环境实现跨域请求的方法
Apr 07 #Javascript
You might like
PHP系列学习之日期函数使用介绍
2012/08/18 PHP
PHP分多步骤填写发布信息的简单方法实例代码
2012/09/23 PHP
Yii PHP Framework实用入门教程(详细介绍)
2013/06/18 PHP
深入讲解PHP Session及如何保持其不过期的方法
2015/08/18 PHP
70+漂亮且极具亲和力的导航菜单设计国外网站推荐
2011/09/20 Javascript
JS(JQuery)操作Array的相关方法介绍
2014/02/11 Javascript
JS获取客户端IP地址、MAC和主机名的7个方法汇总
2014/07/21 Javascript
javascript去除字符串左右两端的空格
2015/02/05 Javascript
jQuery实现首页顶部可伸缩广告特效代码
2015/04/15 Javascript
JavaScript访问字符串中单个字符的两种方法
2015/07/03 Javascript
jQuery 遍历函数详解
2015/07/05 Javascript
安装使用Mongoose配合Node.js操作MongoDB的基础教程
2016/03/01 Javascript
ES6新特性八:async函数用法实例详解
2017/04/21 Javascript
如何让你的JS代码更好看易读
2017/12/01 Javascript
mint-ui在vue中的使用示例
2018/04/05 Javascript
Angular动态绑定样式及改变UI框架样式的方法小结
2018/09/03 Javascript
Vue实现一个图片懒加载插件
2019/03/11 Javascript
vue中使用vue-cli接入融云实现即时通信
2019/04/19 Javascript
JS块级作用域和私有变量实例分析
2019/05/11 Javascript
Python文件及目录操作实例详解
2015/06/04 Python
快速实现基于Python的微信聊天机器人示例代码
2017/03/03 Python
python使用pandas实现数据分割实例代码
2018/01/25 Python
浅析python继承与多重继承
2018/09/13 Python
Python tkinter label 更新方法
2018/10/11 Python
Python常用模块函数代码汇总解析
2020/08/31 Python
证婚人搞笑证婚词
2014/01/10 职场文书
企业节能减排实施方案
2014/03/19 职场文书
营销与策划专业求职信
2014/06/20 职场文书
基层干部个人对照检查及整改措施
2014/10/28 职场文书
2015元旦晚会主持词(开场白+结束语)
2014/12/14 职场文书
个性发展自我评价2015
2015/03/09 职场文书
红高粱观后感
2015/06/10 职场文书
2015年汽车销售员工作总结
2015/07/24 职场文书
尊师重教主题班会
2015/08/14 职场文书
2016年推广普通话宣传周活动总结
2016/04/06 职场文书
JavaScript使用canvas绘制坐标和线
2021/04/28 Javascript