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 相关文章推荐
网页图片延时加载的js代码
Apr 22 Javascript
javascript dom追加内容实现示例
Sep 21 Javascript
javascript 获取元素样式必杀技
May 04 Javascript
jQuery插件Zclip实现完美兼容个浏览器点击复制内容到剪贴板
Apr 30 Javascript
js生成随机数的过程解析
Nov 24 Javascript
angularjs表格ng-table使用备忘录
Mar 09 Javascript
学习Angularjs分页指令
Jul 01 Javascript
jQuery简单实现页面元素置顶时悬浮效果示例
Aug 01 Javascript
webpack常用配置项配置文件介绍
Nov 07 Javascript
手机软键盘弹出时影响布局的解决方法
Dec 15 Javascript
微信小程序地图实现展示线路
Jul 29 Javascript
React列表栏及购物车组件使用详解
Jun 28 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实现水仙花数的4个示例分享
2014/04/08 PHP
php获取网页里所有图片并存入数组的方法
2015/04/06 PHP
PHP从尾到头打印链表实例讲解
2018/09/27 PHP
PHP中md5()函数的用法讲解
2019/03/30 PHP
Laravel配置全局公共函数的方法步骤
2019/05/09 PHP
关于PHP中interface的用处详解
2020/07/26 PHP
用JavaScript实现用一个DIV来包装文本元素节点
2014/09/09 Javascript
JS动态显示表格上下frame的方法
2015/03/31 Javascript
jquery 表单验证之通过 class验证表单不为空
2015/11/02 Javascript
js数组操作方法总结(必看篇)
2016/11/22 Javascript
如何提高数据访问速度
2016/12/26 Javascript
ztree实现左边动态生成树右边为内容详情功能
2017/11/03 Javascript
vue生成文件本地打开查看效果的实例
2018/09/06 Javascript
JS实现星星海特效
2019/12/24 Javascript
[48:44]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS HGT
2014/05/22 DOTA
Python获取某一天是星期几的方法示例
2017/01/17 Python
python使用pil库实现图片合成实例代码
2018/01/20 Python
Python cookbook(数据结构与算法)将序列分解为单独变量的方法
2018/02/13 Python
使用python实现对元素的长截图功能
2019/11/14 Python
Pandas实现DataFrame按行求百分数(比例数)
2019/12/27 Python
Tensorflow中的dropout的使用方法
2020/03/13 Python
5分钟快速掌握Python定时任务框架的实现
2021/01/26 Python
Stuart Weitzman美国官网:美国奢华鞋履品牌
2016/08/18 全球购物
维氏瑞士军刀英国网站:Victorinox英国
2019/07/04 全球购物
用JAVA实现一种排序,JAVA类实现序列化的方法(二种)
2014/04/23 面试题
DELPHI中如何调用API,可举例说明
2014/01/16 面试题
年度考核评语
2014/01/19 职场文书
酒后驾驶检讨书
2014/01/27 职场文书
教师个人鉴定材料
2014/02/08 职场文书
2014年仓库保管员工作总结
2014/12/03 职场文书
公务员年度个人总结
2015/02/12 职场文书
2015年信访工作总结
2015/04/07 职场文书
化工生产实习心得体会
2016/01/22 职场文书
Python基础之Socket通信原理
2021/04/22 Python
Html5通过数据流方式播放视频的实现
2021/04/27 HTML / CSS
十大必看国产动漫排名,魁拔上线,第二曾在日本播出
2022/03/18 国漫