详解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 相关文章推荐
兼容IE、FireFox、Chrome等浏览器的xml处理函数js代码
Nov 30 Javascript
javascript full screen 全屏显示页面元素的方法
Sep 27 Javascript
JS小功能(列表页面隔行变色)简单实现
Nov 28 Javascript
js实现星星打分效果的方法
Jul 05 Javascript
详细分析JavaScript变量类型
Jul 08 Javascript
jquery实现弹出层登录和全屏层注册特效
Aug 28 Javascript
jQuery简单倒计时效果完整示例
Sep 20 Javascript
JavaScript日期对象(Date)基本用法示例
Jan 18 Javascript
SpringMVC简单整合Angular2的示例
Jul 31 Javascript
JS库之Three.js 简易入门教程(详解之一)
Sep 13 Javascript
vue嵌套路由与404重定向实现方法分析
May 04 Javascript
使用vue-router切换页面时实现设置过渡动画
Oct 31 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读取mysql乱码,用set names XXX解决的原理分享
2011/12/29 PHP
CI框架源码阅读,系统常量文件constants.php的配置
2013/02/28 PHP
详细解读PHP中接口的应用
2015/08/12 PHP
Thinkphp 框架扩展之应用模式实现方法分析
2020/04/27 PHP
javascript 多种搜索引擎集成的页面实现代码
2010/01/02 Javascript
PHPExcel中的一些常用方法汇总
2015/01/23 Javascript
jQuery和AngularJS的区别浅析
2015/01/29 Javascript
浅谈javascript中自定义模版
2015/01/29 Javascript
JS+CSS实现自动改变切换方向图片幻灯切换效果的方法
2015/03/02 Javascript
AngularJs bootstrap搭载前台框架——准备工作
2016/09/01 Javascript
js原生跨域_用script标签的简单实现
2016/09/24 Javascript
bootstrap中使用google prettify让代码高亮的方法
2016/10/21 Javascript
jquery对table做排序操作的实例演示
2017/08/10 jQuery
微信小程序实现动态设置页面标题的方法【附源码下载】
2017/11/29 Javascript
vue2.0模拟锚点的实例
2018/03/14 Javascript
原生JS实现的简单小钟表功能示例
2018/08/30 Javascript
15分钟深入了解JS继承分类、原理与用法
2019/01/19 Javascript
微信小程序云开发使用方法新手初体验
2019/05/16 Javascript
js实现简单抽奖功能
2020/11/24 Javascript
Vue+Bootstrap实现简易学生管理系统
2021/02/09 Vue.js
手把手教你python实现SVM算法
2017/12/27 Python
Python selenium实现微博自动登录的示例代码
2018/05/16 Python
Python selenium抓取微博内容的示例代码
2018/05/17 Python
PIL.Image.open和cv2.imread的比较与相互转换的方法
2020/06/03 Python
python中reload重载实例用法
2020/12/15 Python
sklearn中的交叉验证的实现(Cross-Validation)
2021/02/22 Python
css3中background新增的4个新的相关属性用法介绍
2013/09/26 HTML / CSS
香港通票:Hong Kong Pass
2019/02/26 全球购物
Weblogic的布署方式
2013/08/23 面试题
股份合作协议书
2014/04/12 职场文书
债务纠纷起诉书
2015/05/20 职场文书
2015年初中教师个人工作总结
2015/07/21 职场文书
幼儿园安全管理制度
2015/08/05 职场文书
创业计划书之校园超市
2019/09/12 职场文书
仅用几行Python代码就能复制她的U盘文件?
2021/06/26 Python
手写实现JS中的new
2021/11/07 Javascript