详解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 相关文章推荐
最佳的addEvent事件绑定是怎样诞生的
Oct 24 Javascript
百度判断手机终端并自动跳转js代码及使用实例
Jun 11 Javascript
JavaScript给url网址进行encode编码的方法
Mar 18 Javascript
JavaScript实现拖拽网页内元素的方法
Apr 15 Javascript
jQuery聚合函数实例
May 21 Javascript
JavaScript实现自动消除按钮功能的方法
Aug 05 Javascript
javascript实现label标签跳出循环操作
Mar 06 Javascript
jQuery获取复选框被选中数量及判断选择值的方法详解
May 25 Javascript
Express系列之multer上传的使用
Oct 27 Javascript
浅谈VUE监听窗口变化事件的问题
Feb 24 Javascript
vue2.0 axios跨域并渲染的问题解决方法
Mar 08 Javascript
Vue.Draggable拖拽功能的配置使用方法
Jul 29 Javascript
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用户指南-cookies部分
2006/10/09 PHP
PHP正则的Unknown Modifier错误解决方法
2010/03/02 PHP
JavaScript Chart 插件整理
2010/06/18 Javascript
javascript判断两个IP地址是否在同一个网段的实现思路
2013/12/13 Javascript
extJS中常用的4种Ajax异步提交方式
2014/03/07 Javascript
调试JavaScript中正则表达式中遇到的问题
2015/01/27 Javascript
浅谈js中startsWith 函数不能在任何浏览器兼容的问题
2017/03/01 Javascript
js实现登录框鼠标拖拽效果
2017/03/09 Javascript
Vue拖拽组件开发实例详解
2018/05/11 Javascript
基于vue和react的spa进行按需加载的实现方法
2018/09/29 Javascript
关于node-bindings无法在Electron中使用的解决办法
2018/12/18 Javascript
vue cli3.0结合echarts3.0与地图的使用方法示例
2019/03/26 Javascript
利用Vue实现一个markdown编辑器实例代码
2019/05/19 Javascript
element-ui 中使用upload多文件上传只请求一次接口
2019/07/19 Javascript
vscode vue 文件模板的配置方法
2019/07/23 Javascript
JS中FormData类实现文件上传
2020/03/27 Javascript
jQuery中event.target和this的区别详解
2020/08/13 jQuery
jQuery中getJSON跨域原理的深入讲解
2020/09/02 jQuery
21行Python代码实现拼写检查器
2016/01/25 Python
Python 查看文件的读写权限方法
2018/01/23 Python
python实现将多个文件分配到多个文件夹的方法
2019/01/07 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
2019/06/20 Python
对python3 sort sorted 函数的应用详解
2019/06/27 Python
Django为窗体加上防机器人的验证码功能过程解析
2019/08/14 Python
使用matlab或python将txt文件转为excel表格
2019/11/01 Python
Python实现自动打开电脑应用的示例代码
2020/04/17 Python
Python日志器使用方法及原理解析
2020/09/27 Python
印尼披萨外送专家:Domino’s Pizza印尼
2017/12/28 全球购物
汉森批发:Hansen Wholesale
2018/05/24 全球购物
社区安全检查制度
2014/02/03 职场文书
美丽家庭事迹材料
2014/05/03 职场文书
青年安全生产示范岗事迹材料
2014/05/04 职场文书
工地标语大全
2014/06/18 职场文书
学校食堂食品安全承诺书
2015/04/29 职场文书
nginx结合openssl实现https的方法
2021/07/25 Servers
python字符串拼接.join()和拆分.split()详解
2021/11/23 Python