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 相关文章推荐
JavaScript 检测浏览器和操作系统的脚本
Dec 26 Javascript
jquery 操作DOM案例代码分享
Apr 05 Javascript
jQuery中阻止冒泡事件的方法介绍
Apr 12 Javascript
再谈Jquery Ajax方法传递到action(补充)
May 12 Javascript
自定义百度分享的分享按钮
Mar 18 Javascript
JavaScript数组各种常见用法实例分析
Aug 04 Javascript
详解原生JavaScript实现jQuery中AJAX处理的方法
May 10 Javascript
jq stop()和:is(:animated)的用法及区别(详解)
Feb 12 Javascript
vue-router路由简单案例介绍
Feb 21 Javascript
如何以Angular的姿势打开Font-Awesome详解
Apr 22 Javascript
详解Vue CLI3配置解析之css.extract
Sep 14 Javascript
Vue的生命周期一起来看看
Feb 24 Vue.js
通过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+jQuery 注册模块的改进(三):更新到Smarty3.1
2014/10/14 PHP
PHP借助phpmailer发送邮件
2015/05/11 PHP
微信企业转账之入口类分装php代码
2018/10/01 PHP
thinkphp5使html5实现动态跳转的例子
2019/10/16 PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
2020/09/15 PHP
JavaScript 对象链式操作测试代码
2010/04/25 Javascript
jquery dialog键盘事件代码
2010/08/01 Javascript
jQuery 顶部导航跟随滚动条滚动固定浮动在顶部
2014/06/06 Javascript
js+ajax实现获取文件大小的方法
2015/12/08 Javascript
jQuery 中的 DOM 操作
2016/04/26 Javascript
AngularJS控制器继承自另一控制器
2016/05/09 Javascript
举例讲解jQuery对DOM元素的向上遍历、向下遍历和水平遍历
2016/07/07 Javascript
浅谈JavaScript 数据属性和访问器属性
2016/09/01 Javascript
利用n 升级工具升级Node.js版本及在mac环境下的坑
2017/02/15 Javascript
jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解
2017/05/01 jQuery
简单谈谈axios中的get,post方法
2017/06/25 Javascript
Node.js 回调函数实例详解
2017/07/06 Javascript
BootStrap的双日历时间控件使用
2017/07/25 Javascript
React key值的作用和使用详解
2018/08/23 Javascript
JQuery特殊效果和链式调用操作示例
2019/05/13 jQuery
vue使用微信JS-SDK实现分享功能
2019/08/23 Javascript
基于JavaScript实现表格隔行换色
2020/05/08 Javascript
JavaScript this关键字指向常用情况解析
2020/09/02 Javascript
Python+matplotlib+numpy实现在不同平面的二维条形图
2018/01/02 Python
利用django+wechat-python-sdk 创建微信服务器接入的方法
2019/02/20 Python
Django项目后台不挂断运行的方法
2019/08/31 Python
Python图像处理模块ndimage用法实例分析
2019/09/05 Python
Django项目在pycharm新建的步骤方法
2021/03/02 Python
CSS3感应鼠标的背景闪烁和图片缩放动画效果
2014/05/14 HTML / CSS
耐克奥地利官网:Nike奥地利
2019/08/16 全球购物
农民入党思想汇报
2014/01/03 职场文书
安踏广告词改编版
2014/03/21 职场文书
团员个人年度总结
2015/02/26 职场文书
学生会主席任命书
2015/09/21 职场文书
Html5页面播放M4a音频文件
2021/03/30 HTML / CSS
php双向队列实例讲解
2021/11/17 PHP