详解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 相关文章推荐
关于恒等于(===)和非恒等于(!==)
Aug 20 Javascript
js获取height和width的方法说明
Jan 06 Javascript
用Jquery选择器计算table中的某一列某一行的合计
Aug 13 Javascript
jQuery前端开发35个小技巧
May 24 Javascript
Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法
Jun 23 Javascript
利用jQuery实现打字机字幕效果实例代码
Sep 02 Javascript
浅谈JavaScript中promise的使用
Jan 11 Javascript
js实现功能比较全面的全选和多选
Mar 02 Javascript
详解Vue2.0 事件派发与接收
Sep 05 Javascript
vue cli升级webapck4总结
Apr 04 Javascript
Angularjs实现页面模板清除的方法
Jul 20 Javascript
微信小程序 可搜索的地址选择实现详解
Aug 28 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下打开phpMyAdmin出现403错误的问题解决方法
2013/05/23 PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
2014/12/26 PHP
php计算title标题相似比的方法
2015/07/29 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
YII2框架中日志的配置与使用方法实例分析
2020/03/18 PHP
基于PHP实现用户在线状态检测
2020/11/10 PHP
JavaScript 一行代码,轻松搞定浮动快捷留言-V2升级版
2010/04/02 Javascript
30个最好的jQuery 灯箱插件分享
2011/04/25 Javascript
30分钟就入门的正则表达式基础教程
2013/02/25 Javascript
Javascript setInterval的两种调用方法(实例讲解)
2013/11/29 Javascript
jQuery学习笔记之jQuery.extend(),jQuery.fn.extend()分析
2014/06/09 Javascript
Javascript的表单验证-初识正则表达式
2016/03/18 Javascript
Bootstrap Chart组件使用教程
2016/04/28 Javascript
js实现点击图片自动提交action的简单方法
2016/10/16 Javascript
Javascript前端经典的面试题及答案
2017/03/14 Javascript
Vue中的v-cloak使用解读
2017/03/27 Javascript
Three.js实现浏览器变动时进行自适应的方法
2017/09/26 Javascript
js实现经典贪吃蛇小游戏
2020/03/19 Javascript
vue 实现用户登录方式的切换功能
2020/04/14 Javascript
Python 两个列表的差集、并集和交集实现代码
2016/09/21 Python
详解Python中where()函数的用法
2018/03/27 Python
Numpy数据类型转换astype,dtype的方法
2018/06/09 Python
python实现对任意大小图片均匀切割的示例
2018/12/05 Python
使用Tensorflow实现可视化中间层和卷积层
2020/01/24 Python
Python如何实现定时器功能
2020/05/28 Python
详解css3 object-fit属性
2018/07/27 HTML / CSS
FILA德国官方网站:来自意大利的体育和街头服饰品牌
2019/07/19 全球购物
JAVA的事件委托机制和垃圾回收机制
2014/09/07 面试题
服务员岗位责任制
2014/02/11 职场文书
酒店总经理职务说明书
2014/02/26 职场文书
英文求职信范文
2014/05/23 职场文书
写给纪委的违纪检讨书
2015/05/05 职场文书
表扬稿表扬信的格式及范文
2019/06/24 职场文书
如何有效防止sql注入的方法
2021/05/25 SQL Server
教你怎么用Python操作MySql数据库
2021/05/31 Python
MySQL分库分表详情
2021/09/25 MySQL