详解vue静态资源打包中的坑与解决方案


Posted in Javascript onFebruary 05, 2018

本文主要解决

①.vue-cli默认配置打包后部署至特定路径下静态资源路径错误问题;

②.静态资源打包使用相对路径后css文件引入大图片路径错误问题。

1、问题

vue-cli 脚手架生成的默认打包配置文件情况下运行 npm run build 打包后,部署项目至特定路径下:如:

//ip:port/public/springActivity/

此时访问:

http://ip:port/public/springActivity/index.html

index.html 可以正常访问,但是引用的js,css等文件服务器响应均为404,查看引入的资源路径如下:

http://ip:port/static/css/app.cea07642cd24c0d7a5c4b9b7afc7ff64.css
http://ip:port/static/js/app.815851e87b083afb82bf.js

2、分析

由上可以看出是资源打包路径有误,打包后的资源使用了绝对根目录路径,因此将项目部署到特定目录下,其引入的资源路径无法被正确解析。

3、解决

在打包时需要使用相对路径来处理静态资源,更改build中资源发布路径配置(config/index.js, build对象):

将 assetsPublicPath: '/'  改为  assetsPublicPath: './',
再次打包,并将资源部署到特定路径下,然后访问:

此时index.html可以正常访问,同时js和css资源也可以正常访问,但是css中引入的assets目录下的大图片资源出错了(服务端404)

4. 再分析

查看引入的图片资源路径如下:

http://ip:port/public/springActivity/static/css/static/img/question_bg.61a2825.png

实际项目中资源路径如下:

index.html
static/
 |--js/
  |--*.js
 |--css/
  |--*.css
 |--img/
  |--*.png

很明显图片引入路径有误。分析图片引入路径,发现路径均多了"/static/css"两层目录,猜测是css目录下的css文件引入图片路径为"/static/img/question_bg.61a2825.png" , 查看css文件,css中引入图片路径如下:

background:url(static/img/question_bg.61a2825.png)

5、在解决

css文件中路径存在问题,肯定又是打包哪个环节资源路径没有配置好,分析打包过程,css是在js中引入的或是写在vue文件中的,css文件首先被less,postcss等处理,处理后会被ExtractTextPlugin处理,ExtractTextPlugin将js中的css全部抽离至app.css文件中。

首先将options.extract设为false,关闭抽离css功能,再次打包并部署至特定目录,访问:http://ip:port/public/springActivity/index.html, 啪,页面正常显示,大公即将告成。

分析打包后的文件,发现没有了css文件,发现css文件全部在app.js文件中;通过js将css注入 index.html文件中,因此css文件中引入的图片资源路径应该是相对于index.html文件路径的,即:"static/img/question_bg.61a2825.png",这与下面css文件中的图片资源路径一致,因此图片能够被正常访问。

background:url(static/img/question_bg.61a2825.png)
现在很确定知道问题出在哪了,即:ExtractTextPlugin抽离css文件时没有转换资源引入路径,导致app.css引入了相对app.css目录为"static/img/ .png"的静态资源,该路径相对index.html即为:static/css/static/img/ .png。

因此使用ExtractTextPlugin插件时还需要配置静态资源路径参数,通过查询资料,得知可以通过添加publicPath:"../../"解决该问题:

if (options.extract) {
 return ExtractTextPlugin.extract({
 use: loaders,
 fallback: 'vue-style-loader',
 publicPath:"../../"     //添加
 })
}

打包部署到特定目录下后访问index.html文件,页面一切正常,app.css文件正常引入,图片资源也正常引入,查看app.css文件引入图片资源方式如下:

background:url(../../static/img/question_bg.61a2825.png

publicPath配置后,css文件中引入的图片文件路径前添加了该路径配置;

publicPath 属性值为打包后的 app.css文件至index.html文件的相对路径

图片资源也可以直接放在vue-cli生成的static目录下规避上述问题,但是通过这种方式图片名称中无法增加md5字符串,不利于版本控制

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

Javascript 相关文章推荐
js为数字添加逗号并格式化数字的代码
Aug 23 Javascript
jQuery实现div浮动层跟随页面滚动效果
Feb 11 Javascript
Node.js实现在目录中查找某个字符串及所在文件
Sep 03 Javascript
jQuery中ajax的post()方法用法实例
Dec 26 Javascript
什么是JavaScript注入攻击?
Sep 14 Javascript
CSS3 media queries结合jQuery实现响应式导航
Sep 30 Javascript
JavaScript实现简易的天数计算器实例【附demo源码下载】
Jan 18 Javascript
微信小程序 wx.request方法的异步封装实例详解
May 18 Javascript
webpack多入口文件页面打包配置详解
Jan 09 Javascript
vue.js 双层嵌套for遍历的方法详解, 类似php foreach()
Sep 07 Javascript
基于脚手架创建Vue项目实现步骤详解
Aug 03 Javascript
关于JavaScript中异步/等待的用法与理解
Nov 18 Javascript
理解Koa2中的async&await的用法
Feb 05 #Javascript
zTree 树插件实现全国五级地区点击后加载的示例
Feb 05 #Javascript
使用vue如何构建一个自动建站项目
Feb 05 #Javascript
在 webpack 中使用 ECharts的实例详解
Feb 05 #Javascript
在Vue中使用echarts的方法
Feb 05 #Javascript
JavaScript中Object基础内部方法图
Feb 05 #Javascript
基于axios封装fetch方法及调用实例
Feb 05 #Javascript
You might like
分享一段PHP制作的中文拼音首字母工具类
2014/12/11 PHP
PHP实现获取中英文首字母
2015/06/19 PHP
PHP编写的图片验证码类文件分享
2016/06/06 PHP
Thinkphp通过一个入口文件如何区分移动端和PC端
2017/04/18 PHP
利用phpexcel对数据库数据的导入excel(excel筛选)、导出excel
2017/04/27 PHP
javascript读取xml
2006/11/04 Javascript
JavaScript国旗变换效果代码
2008/08/13 Javascript
Angular2表单自定义验证器的实现
2016/10/19 Javascript
BootStrap框架个人总结(bootstrap框架、导航条、下拉菜单、轮播广告carousel、栅格系统布局、标签页tabs、模态框、菜单定位)
2016/12/01 Javascript
VUE 更好的 ajax 上传处理 axios.js实现代码
2017/05/10 Javascript
获取本机IP地址的实例(JavaScript / Node.js)
2017/11/24 Javascript
在Vue中使用echarts的方法
2018/02/05 Javascript
Angular利用内容投射向组件输入ngForOf模板的方法
2018/03/05 Javascript
使用Vue 实现滑动验证码功能
2019/06/27 Javascript
微信用户访问小程序的登录过程详解
2019/09/20 Javascript
微信小程序实现页面浮动导航
2020/01/08 Javascript
基于Linux系统中python matplotlib画图的中文显示问题的解决方法
2017/06/15 Python
将tensorflow的ckpt模型存储为npy的实例
2018/07/09 Python
python使用tcp实现局域网内文件传输
2020/03/20 Python
计算机二级python学习教程(1) 教大家如何学习python
2019/05/16 Python
Python 监测文件是否更新的方法
2019/06/10 Python
Python守护进程实现过程详解
2020/02/10 Python
python实现取余操作的简单实例
2020/08/16 Python
python环境搭建和pycharm的安装配置及汉化详细教程(零基础小白版)
2020/08/19 Python
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
前端面试必备之CSS3的新特性
2017/09/05 HTML / CSS
mysql的最长数据库名,表名,字段名可以是多长
2014/04/21 面试题
英文版区域经理求职信
2013/10/23 职场文书
专升本学生毕业自我鉴定
2014/10/04 职场文书
学生检讨书怎么写?
2014/10/10 职场文书
优秀校长事迹材料
2014/12/24 职场文书
教师个人学习总结
2015/02/11 职场文书
创先争优活动个人总结
2015/03/04 职场文书
调任通知
2015/04/21 职场文书
《我在为谁工作》:工作的质量往往决定生活的质量
2019/12/27 职场文书
JS实现刷新网页后之前浏览位置保持不变示例详解
2022/08/14 Javascript