详解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 相关文章推荐
Js 冒泡事件阻止实现代码
Jan 27 Javascript
如何使用Javascript正则表达式来格式化XML内容
Jul 04 Javascript
jQuery学习笔记之 Ajax操作篇(三) - 过程处理
Jun 23 Javascript
JavaScript中数组成员的添加、删除介绍
Dec 30 Javascript
JavaScript函数参数使用带参数名的方式赋值传入的方法
Mar 19 Javascript
牛叉的Jquery——Jquery与DOM对象的互相转换及DOM的三种操作
Oct 29 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
Nov 20 Javascript
JavaScript实现短暂提示框功能
Apr 04 Javascript
js继承的这6种方式!(上)
Apr 23 Javascript
简单谈谈javascript高级特性
Sep 04 Javascript
手把手带你搭建一个node cli的方法示例
Aug 07 Javascript
Vue3中toRef与toRefs的区别
Mar 24 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
输出控制类
2006/10/09 PHP
PHP session常见问题集锦及解决办法总结
2007/03/18 PHP
PHP、Nginx、Apache中禁止网页被iframe引用的方法
2020/10/01 PHP
jQuery实现公告文字左右滚动的实例代码
2013/10/29 Javascript
jQuery中add()方法用法实例
2015/01/08 Javascript
一看就懂:jsonp详解
2015/06/01 Javascript
JavaScript代码轻松实现网页内容禁止复制(代码简单)
2015/10/23 Javascript
jQuery图片轮播功能实例代码
2017/01/29 Javascript
Extjs gridpanel 中的checkbox(复选框)根据某行的条件不能选中的解决方法
2017/02/17 Javascript
js实现简单的二级联动效果
2017/03/09 Javascript
js模拟支付宝密码输入框
2017/04/11 Javascript
Vue-Cli中自定义过滤器的实现代码
2017/08/12 Javascript
es6 for循环中let和var区别详解
2020/01/12 Javascript
JS使用for in有序获取对象数据
2020/05/19 Javascript
python写的一个squid访问日志分析的小程序
2014/09/17 Python
python在Windows8下获取本机ip地址的方法
2015/03/14 Python
Python使用Mechanize模块编写爬虫的要点解析
2016/03/31 Python
Python 3.x读写csv文件中数字的方法示例
2017/08/29 Python
Python利用turtle库绘制彩虹代码示例
2017/12/20 Python
Python网络爬虫神器PyQuery的基本使用教程
2018/02/03 Python
python使用sqlite3时游标使用方法
2018/03/13 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
2019/06/17 Python
解决python 虚拟环境删除包无法加载的问题
2020/07/13 Python
Python读写锁实现实现代码解析
2020/11/28 Python
HTML5新增form控件和表单属性实例代码详解
2019/05/15 HTML / CSS
澳大利亚票务和娱乐市场领导者:Ticketmaster
2017/03/03 全球购物
客服文员岗位职责
2013/11/29 职场文书
大学生职业规划前言模板
2013/12/27 职场文书
电工工作职责范本
2014/02/22 职场文书
大学生作弊检讨书
2014/09/11 职场文书
2014教师个人自我评价范文
2014/09/13 职场文书
2014年手术室工作总结
2014/11/26 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书
2015社区精神文明建设工作总结
2015/04/21 职场文书
《思路决定出路》读后感3篇
2019/12/11 职场文书
MySQL pt-slave-restart工具的使用简介
2021/04/07 MySQL