详解Vue-cli中的静态资源管理(src/assets和static/的区别)


Posted in Javascript onJune 19, 2018

你可能注意到了我们的静态资源共有两个目录src/assets和static/,你们它们之间有怎样的区别呢?

资源打包

为了回答这个问题,我们需要了解webpack是如何处理静态资源的。在所有的*.vue文件中你所有的templates 和CSS 都被vue-html-loader 和css-loader 查询资源的URLs解析. 比如说, 在 img src=”./logo.png” 和background: url(./logo.png) 中./logo.png是一个相对资源路径,并且会被Webpack视为一个模块依赖来解析。

因为./logo.png并非一个Javascript,当将它作为模块依赖对待时,我们需要用url-loader和file-loader去处理它。这种公式化处理早已经为你配置了loader,所以你基本上可以获得诸如文件名指纹和有条件的内嵌base64,因此你能够使用相对/模块路径而不必担心部署问题。

自从这些资源可以在build期间被内联/复制/重命名,它们本质上来讲是你资源代码的一部分。这就是为什么它们被推荐用于延源资源替换Webpack-processed的内部/src资源。事实上,你甚至不必将它们放进/src/assets:你可以基于模块/组件去组织它们并使用,你可以将每一个组件放进他们自己的文件夹,随着它的静态文件正确的紧挨着它。

资源决定规则

  1. 相对URLs, 例如 ./assets/logo.png 将会被解释为一个模块依赖. 它们将会被替换为基于你Webpack输出配置自动生成的 URL
  2. 无前缀URLs, 例如. assets/logo.png 将会被像相对URLs一样处理并将被转化为 ./assets/logo.png.
  3. 带~前缀的URLs 将会被看做模块请求, 类似于请求(‘some-module/image.png'). 如果你想改变Webpack的模块解决配置你需要使用这个前缀 。例如,你需要处理资源的别名,你需要使用 ~assets/logo.png去确保这个别名时受到重视的.
  4. 特权相对URLs, 例如 /assets/logo.png 是完全不作处理的.

在Javascript中获取资源路径

为了使Webpack可以正确返回资源路径, 你需要使用 require(‘./relative/path/to/file.jpg'), 它将会被file-loader处理 and returns并返回处理过的URL. 例如:

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

注意上例将会包含每个在最后一次build中的./bgs/ 下的图片。 这是由于 Webpack 无法推测它们哪个会在运行时被使用, 因此会包含所有图片.

“真正”的静态资源

对比而言, static/ 中的文件是完全不被Webpack处理的,它们被以相同的文件名直接被复制进最终目标as-is.你务必要使用绝对路径去引用它们.这是由config.js加入build.assetspublicpath和build.assetssubdirectory确定。

如下是一个含默认值得例子:

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

任何在 static/ 中的文件都需要被使用绝对路径 /static/[filename]来引用. 如果你改变assetSubDirectory 为assets, 那么这些 URLs将需要被替换为 /assets/[filename].

译自:http://vuejs-templates.github.io/webpack/static.html

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

Javascript 相关文章推荐
jquery.Jwin.js 基于jquery的弹出层插件代码
May 23 Javascript
基于jQuery中对数组进行操作的方法
Apr 16 Javascript
JavaScript实现文字与图片拖拽效果的方法
Feb 16 Javascript
浅谈JavaScript中的作用域和闭包问题
Jul 07 Javascript
jQuery实现获取table表格第一列值的方法
Mar 01 Javascript
json的使用小结
Jun 08 Javascript
jQuery轮播图效果精简版完整示例
Sep 04 Javascript
jQuery中的siblings()是什么意思(推荐)
Dec 29 Javascript
vue2.0 + ele的循环表单及验证字段方法
Sep 18 Javascript
原生javascript的ajax请求及后台PHP响应操作示例
Feb 24 Javascript
mapboxgl实现带箭头轨迹线的代码
Jan 04 Javascript
vuex的使用和简易实现
Jan 07 Vue.js
vue-cli2.x项目优化之引入本地静态库文件的方法
Jun 19 #Javascript
vue异步加载高德地图的实现
Jun 19 #Javascript
angular 实现的输入框数字千分位及保留几位小数点功能示例
Jun 19 #Javascript
JS正则表达式常见用法实例详解
Jun 19 #Javascript
JavaScript使用math.js进行精确计算操作示例
Jun 19 #Javascript
使用proxy实现一个更优雅的vue【推荐】
Jun 19 #Javascript
微信小程序input框中加入小图标的实现方法
Jun 19 #Javascript
You might like
深入理解PHP原理之异常机制
2010/08/21 PHP
如何批量清理系统临时文件(语言:C#、 C/C++、 php 、python 、java )
2016/02/01 PHP
PHP的PDO操作简单示例
2016/03/30 PHP
深入理解PHP类的自动载入机制
2016/09/16 PHP
如何取得中文输入的真实长度?
2006/06/24 Javascript
JsEasy简介 JsEasy是什么?与下载
2007/03/07 Javascript
33个优秀的 jQuery 图片展示插件分享
2012/03/14 Javascript
jquery Mobile入门—多页面切换示例学习
2013/01/08 Javascript
js控制滚动条缓慢滚动到顶部实现代码
2013/03/20 Javascript
jQuery JSON实现无刷新三级联动实例探讨
2013/05/28 Javascript
Javascript中判断变量是数组还是对象(array还是object)
2013/08/14 Javascript
jQuery拖拽div实现思路
2014/02/19 Javascript
nodejs微信开发之授权登录+获取用户信息
2019/03/17 NodeJs
three.js利用卷积法如何实现物体描边效果
2019/11/27 Javascript
js实现倒计时秒杀效果
2020/03/25 Javascript
基于原生js实现判断元素是否有指定class名
2020/07/11 Javascript
[45:17]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第三场 1月9日
2021/03/11 DOTA
Python实现的简单发送邮件脚本分享
2014/11/07 Python
python实现在每个独立进程中运行一个函数的方法
2015/04/23 Python
Python利用前序和中序遍历结果重建二叉树的方法
2016/04/27 Python
python读文件保存到字典,修改字典并写入新文件的实例
2018/04/23 Python
python opencv 读取图片 返回图片某像素点的b,g,r值的实现方法
2019/07/03 Python
python网络爬虫 Scrapy中selenium用法详解
2019/09/28 Python
pytorch模型预测结果与ndarray互转方式
2020/01/15 Python
Python数组拼接np.concatenate实现过程
2020/04/18 Python
记一次高分屏下canvas模糊问题
2020/02/17 HTML / CSS
联想德国官网:Lenovo Germany
2018/07/04 全球购物
国际象棋商店:The Chess Store
2018/07/09 全球购物
如何判断计算机可能已经中马
2013/03/22 面试题
医护人员英文求职信范文
2013/11/26 职场文书
公积金转移接收函
2014/01/11 职场文书
管理失职检讨书
2014/02/12 职场文书
法学专业毕业生自荐信
2014/06/11 职场文书
终止解除劳动合同证明书
2015/06/17 职场文书
浅析MySQL如何实现事务隔离
2021/06/26 MySQL
css样式important规则的正确使用方式
2022/06/10 HTML / CSS