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 相关文章推荐
js 第二代身份证号码的验证机制代码
May 12 Javascript
日历查询的算法 如何计算某一天是星期几
Dec 12 Javascript
jquery淡化版banner异步图片文字效果切换图片特效
Apr 08 Javascript
js中直接声明一个对象的方法
Aug 10 Javascript
如何判断出一个js对象是否一个dom对象
Nov 24 Javascript
jQuery select自动选中功能实现方法分析
Nov 28 Javascript
javascript实现的图片预览功能
Mar 25 Javascript
微信小程序loading组件显示载入动画用法示例【附源码下载】
Dec 09 Javascript
jQuery中each和js中forEach的区别分析
Feb 27 jQuery
vue-i18n结合Element-ui的配置方法
May 20 Javascript
微信小程序中的video视频实现 自定义播放按钮、封面图、视频封面上文案
Jan 02 Javascript
JS实现网页时钟特效
Mar 25 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
PHP中执行cmd命令的方法
2014/10/11 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
2019/11/23 PHP
图片完美缩放
2006/09/07 Javascript
几个高效,简洁的字符处理函数
2007/04/12 Javascript
关于Mozilla浏览器不支持innerText的解决办法
2011/01/01 Javascript
js网页侧边随页面滚动广告效果实现
2011/04/14 Javascript
解析ScrollPic在ie8下只滚动一遍,然后变为空白 ie6,ie7,chrome,firefox正常
2013/06/26 Javascript
jQuery中校验时间格式的正则表达式小结
2013/09/22 Javascript
读取input:file的路径并显示本地图片的方法
2013/09/23 Javascript
动态加载JS文件的三种方法
2013/11/08 Javascript
js单例模式详解实例
2013/11/21 Javascript
无闪烁更新网页内容JS实现
2013/12/19 Javascript
Javascript实现计算个人所得税
2015/05/10 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
2016/07/22 Javascript
Bootstrap树形菜单插件TreeView.js使用方法详解
2016/11/01 Javascript
jQuery实现背景滑动菜单
2016/12/02 Javascript
easyui简介_动力节点Java学院整理
2017/07/14 Javascript
浅析JS抽象工厂模式
2017/12/14 Javascript
vue中实现图片和文件上传的示例代码
2018/03/16 Javascript
关于vue的语法规则检测报错问题的解决
2018/05/21 Javascript
在Create React App中使用CSS Modules的方法示例
2019/01/15 Javascript
Vue中axios的封装(报错、鉴权、跳转、拦截、提示)
2019/08/20 Javascript
详解JSON.stringify()的5个秘密特性
2020/05/26 Javascript
你不知道的 TypeScript 高级类型(小结)
2020/08/28 Javascript
Python使用MYSQLDB实现从数据库中导出XML文件的方法
2015/05/11 Python
Python列表和元组的定义与使用操作示例
2017/07/26 Python
Django安装配置mysql的方法步骤
2018/10/15 Python
Python虚拟环境virtualenv创建及使用过程图解
2020/12/08 Python
如何查看python关键字
2021/01/17 Python
计算机操作自荐信
2013/12/07 职场文书
党员教师工作决心书
2014/03/13 职场文书
高三家长寄语
2014/04/03 职场文书
给孩子的新年寄语
2014/04/08 职场文书
反腐倡廉演讲稿
2014/05/22 职场文书
汽车4S店销售经理岗位职责
2015/04/02 职场文书
python tkinter模块的简单使用
2021/04/07 Python