vue2.0 资源文件assets和static的区别详解


Posted in Javascript onApril 08, 2018

资源文件处理

在我们的项目结构里,有两个资源文件的路径,分别是:src/assets 和 static/。那这两个到底有什么区别呢?

Webpacked 资源

为了回答这个问题,我们首先需要理解webpack是怎样处理静态资源的。在*.vue组件中,所有的templates和css都会被vue-html-loader 和 css-loader解析,寻找资源的URL。

举个例子,在 <img src="./logo.png"> 和 background: url(./logo.png), “./logo.png”中,都是相对资源路径,都会被Webpack解析成模块依赖 。

由于logo.png不是JavaScript,当被看成一个模块依赖的时候,我们需要使用url-loader 和 file-loader进行处理。 该模板已经配置好了这些loaders,所以你能够使用相对/模块路径时不需要担心部署的问题。由于这些资源可能在构建的时候被内联/复制/重命名, 所以它们从本质上来说是你源码的一部分。这就是为什么我们建议将交由webpack处理的静态资源和其它源文件一样放在/src路径下面。实际上,你甚至不需要把它们全都放在/src/assets路径下:你可以基于模块/组件的使用来组织文件结构。例如,你可以把每个组件和属于它的静态资源放在它自己的目录下。

资源处理规则

相对URL, e.g. ./assets/logo.png 将会被解释成一个模块依赖。它们会被一个基于你的Webpack输出配置自动生成的URL替代。没有前缀的URL, e.g. assets/logo.png 将会被看成相对URL,并且转换成./assets/logo.png

前缀带~的URL 会被当成模块请求, 类似于require(‘some-module/image.png'). 如果你想要利用Webpack的模块处理配置,就可以使用这个前缀。例如,如果你有一个对于assets的路径解析,你需要使用 <img src="~assets/logo.png"> 来确保解析是对应上的。相对根目录的URL, e.g. /assets/logo.png 是不会被处理的

在 Javascript中获取资源路径

为了能让Webpack返回正确的资源路径,你需要使用require(‘./relative/path/to/file.jpg'),由file-loader进行解析,然后返回处理过的URL。例如:

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

注意上面的例子,在最终的构建时将会包含./bgs/路径下的所有图片 这是因为Webpack不能猜出来在运行时会用到其中的哪个,所以会包含所有的。

“真实的” 静态资源

作为对比,在static/下的文件都不会被Webpack处理:它们使用相同的文件名,直接拷贝到最终的路径。你必须使用绝对路径来引用这些文件,取决于在config.js里面加入的build.assetsPublicPath 和 build.assetsSubDirectory。

举个例子,下面的默认值是:

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

所有放在 static/目录下的文件都应该是使用绝对URL/static/[filename]引用的。如果你将assetSubDirectory的值改成assets, 那么这些URL就会被变成 /assets/[filename]

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

Javascript 相关文章推荐
JQuery下的Live方法和$.browser方法使用代码
Jun 02 Javascript
js控制分页打印、打印分页示例
Feb 08 Javascript
JavaScript设计模式之建造者模式介绍
Dec 28 Javascript
JavaScript检测浏览器cookie是否已经启动的方法
Feb 27 Javascript
JavaScript中操作字符串之localeCompare()方法的使用
Jun 06 Javascript
Javascript中获取浏览器类型和操作系统版本等客户端信息常用代码
Jun 28 Javascript
Vue学习之路之登录注册实例代码
Jul 06 Javascript
JS实现图片居中悬浮效果
Dec 25 Javascript
WebSocket的通信过程与实现方法详解
Apr 29 Javascript
使用vue制作滑动标签
Sep 21 Javascript
JavaScript canvas绘制圆弧与圆形
Feb 18 Javascript
详细分析React 表单与事件
Jul 08 Javascript
通过vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题
Apr 08 #Javascript
vuex 项目结构目录及一些简单配置介绍
Apr 08 #Javascript
JS求Number类型数组中最大元素方法
Apr 08 #Javascript
angular2模块和共享模块详解
Apr 08 #Javascript
vue下拉列表功能实例代码
Apr 08 #Javascript
详解Vue-cli webpack移动端自动化构建rem问题
Apr 07 #Javascript
vue-cli开发环境实现跨域请求的方法
Apr 07 #Javascript
You might like
让CodeIgniter的ellipsize()支持中文截断的方法
2014/06/12 PHP
PHP+sqlite数据库操作示例(创建/打开/插入/检索)
2016/05/26 PHP
jquery实现图片等比例缩放以及max-width在ie中不兼容解决
2013/03/21 Javascript
js和jquery如何获取图片真实的宽度和高度
2014/09/28 Javascript
javascript几个易错点记录
2014/11/26 Javascript
JavaScript常用小技巧小结
2014/12/29 Javascript
Nodejs学习笔记之测试驱动
2015/04/16 NodeJs
JS实现支持Ajax验证的表单插件
2016/03/24 Javascript
JSON 的正确用法探讨:Pyhong、MongoDB、JavaScript与Ajax
2016/05/15 Javascript
Angular2  NgModule 模块详解
2016/10/19 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
2016/11/05 Javascript
解决Vue2.0自带浏览器里无法打开的原因(兼容处理)
2017/07/28 Javascript
element-ui 中使用upload多文件上传只请求一次接口
2019/07/19 Javascript
微信小程序点击图片实现长按预览、保存、识别带参数二维码、转发等功能
2019/07/20 Javascript
Vue filter 过滤器、以及在table中的使用介绍
2020/09/07 Javascript
python如何把嵌套列表转变成普通列表
2018/03/20 Python
python爬虫之线程池和进程池功能与用法详解
2018/08/02 Python
使用Python快乐学数学Github万星神器Manim简介
2019/08/07 Python
查看Python依赖包及其版本号信息的方法
2019/08/13 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
2020/04/17 Python
世界领先的以旅馆为主的在线预订平台:Hostelworld
2016/10/09 全球购物
悬挂训练绳:TRX
2017/12/14 全球购物
We Fashion荷兰:一家国际时装公司
2018/04/18 全球购物
意大利独特而优质的家居用品:Fazzini
2018/12/05 全球购物
印尼在线购买隐形眼镜网站:Lensza.co.id
2019/04/27 全球购物
SIMON MILLER官网:洛杉矶的生活方式品牌
2020/10/19 全球购物
安全资料员岗位职责
2013/12/14 职场文书
英文自荐信
2013/12/19 职场文书
《最大的“书”》教学反思
2014/02/14 职场文书
人力资源经理的岗位职责
2014/03/02 职场文书
小学生环保演讲稿
2014/04/25 职场文书
法人委托书
2014/07/31 职场文书
大学生村官个人对照检查材料(群众路线)
2014/09/26 职场文书
工作感想范文
2015/08/07 职场文书
PHP设计模式(观察者模式)
2021/07/07 PHP
Redis如何实现验证码发送 以及限制每日发送次数
2022/04/18 Redis