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 相关文章推荐
addRule在firefox下的兼容写法
Nov 30 Javascript
JQuery jsonp 使用示例代码
Aug 12 Javascript
理解javascript中的回调函数(callback)
Sep 02 Javascript
JavaScript实现动态创建CSS样式规则方案
Sep 06 Javascript
浅谈javascript中createElement事件
Dec 05 Javascript
js实现点击添加一个input节点
Dec 05 Javascript
JavaScript函数详解
Feb 27 Javascript
浅谈Sizzle的“编译原理”
Apr 14 Javascript
jquery select2的使用心得(推荐)
Dec 04 Javascript
详解vue指令与$nextTick 操作DOM的不同之处
Aug 02 Javascript
JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法
Apr 13 Javascript
处理JavaScript值为undefined的7个小技巧
Jul 28 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
smarty实例教程
2006/11/19 PHP
PHP 采集程序原理分析篇
2010/03/05 PHP
php抓取页面与代码解析 推荐
2010/07/23 PHP
php清空(删除)指定目录下的文件,不删除目录文件夹的实现代码
2014/09/04 PHP
php判断文件夹是否存在不存在则创建
2015/04/09 PHP
thinkPHP中create方法与令牌验证实例浅析
2015/12/08 PHP
解读PHP中上传文件的处理问题
2016/05/29 PHP
浅谈PHP链表数据结构(单链表)
2016/06/08 PHP
详解php中的implements 使用
2017/06/13 PHP
Laravel如何实现适合Api的异常处理响应格式
2020/06/14 PHP
5 cool javascript apps
2007/03/24 Javascript
用Jquery实现多级下拉框无刷新的联动
2010/12/22 Javascript
jQuery实现页面滚动时层智能浮动定位实例探讨
2013/03/29 Javascript
点击表单提交时出现jQuery没有权限的解决方法
2014/07/23 Javascript
初识Node.js
2014/09/03 Javascript
检测一个函数是否是JavaScript原生函数的小技巧
2015/03/13 Javascript
JS+DIV实现鼠标划过切换层效果的方法
2015/05/25 Javascript
AngularJS ng-controller 指令简单实例
2016/08/01 Javascript
基于Vue2-Calendar改进的日历组件(含中文使用说明)
2019/04/14 Javascript
element-ui 中使用upload多文件上传只请求一次接口
2019/07/19 Javascript
《javascript设计模式》学习笔记三:Javascript面向对象程序设计单例模式原理与实现方法分析
2020/04/07 Javascript
[01:06:42]VP vs NewBee Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
Python 3.x 新特性及10大变化
2015/06/12 Python
Python 使用with上下文实现计时功能
2018/03/09 Python
Python for循环生成列表的实例
2018/06/15 Python
Python 多个图同时在不同窗口显示的实现方法
2019/07/07 Python
Python tkinter实现图片标注功能(完整代码)
2019/12/08 Python
python基于opencv实现人脸识别
2021/01/04 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
2021/01/06 Python
The North Face北面德国官网:美国著名户外品牌
2018/12/12 全球购物
食堂采购员岗位职责
2014/03/17 职场文书
档案工作汇报材料
2014/08/21 职场文书
2014年客服工作总结与计划
2014/12/09 职场文书
三好学生评选事迹材料(2016精选版)
2016/02/25 职场文书
2016年幼儿园教师师德承诺书
2016/03/25 职场文书
python获取淘宝服务器时间的代码示例
2021/04/22 Python