vue-cli脚手架打包静态资源请求出错的原因与解决


Posted in Javascript onJune 06, 2019

问题

  1. vue-cli默认配置打包后部署到特定路径下静态资源路径错误问题。
  2. 静态资源打包使用相对路径后css文件引入大图片路径错误问题

使用vue-cli2脚手架生成的默认打包配置文件,npm run build打包,部署项目到特定路径下://ip:port/test/index.html
此时访问//ip:port/test/index.html可以正常访问,但是引用的js和css等文件服务器响应为404,此时我们查看资源请求路径:

http://ip:port/static/css/app.[hash].css
http://ip:port/static/js/app.[hash].js

可以看出,上面的静态资源访问路径是不正确的,我们正确的请求路径应该是

http://ip:port/test/static/css/app.[hash].css
http://ip:port/test/static/js/app.[hash].js

原因

可以看出导致资源加载失败的原因是路径错误,我们可以移步看看index.html文件,

<!DOCTYPE html>
 <html>
 <head>
 <title>project</title>
 <link href=/static/css/app.css rel=stylesheet>
 </head>
 <body>
 <div id=app></div>
 <script type=text/javascript src=/static/js/app.js>
 </script>
 ...
 </body>
 </html>

可以看出引入的css和js都是使用的绝对根目录路径,因此将项目部署到特定目录下,其引入的资源路径无法被正确解析。

解决

在webpack打包时,使用相对路径来处理静态资源,修改build中资源发布路径配置(build/config.js);

build: {
 ...
 // Paths
 assetsRoot: path.resolve(__dirname, '../dist'),
 assetsSubDirectory: 'static',
 assetsPublicPath: './',
 ...
}

将assetsPublicPath: '/',更改为assetsPublicPath: './',再进行打包,并将资源部署到特定路径下,然后访问,此时index.html可以正常访问,同时js和css资源也可以正常加载访问了。

css中引入assets目录下的图片资源出错

我们经常这样引用一个img图片

background: url('static/img/bg.png');

但是打包后看到这个图片的引用地址是这样的。

http://ip:port/test/static/css/static/img/bg.png

可以看出css中图片的路径存在问题了,分析打包过程,css是在js中引入的或是写在vue文件中的,css文件首先被less,postcss等处理,处理后会被ExtractTextPlugin处理,ExtractTextPlugin将js中的css全部抽离至app.css文件中。

解决方法一

将options.extract设置为false

options.extract: false,

关闭抽离css功能,再次打包并部署,此时你会发现没有css文件了,css文件全部在app.js文件中,通过js将css注入到index.html文件中,此时图片的访问路径是相当index.html文件的,所以可以正常访问

解决方案二

设置ExtractTextPlugin插件中的publicPath
ExtractTextPlugin插件是为了将css从js文件中抽离出来,我们可以通过配置ExtractTextPlugin的静态资源路径参数来达到同样的效果,build目录下的utils.js文件,修改publicPath: '../../';

// Extract CSS when that option is specified
// (which is the case during production build)
if (!options.extract) {
 return ExtractTextPlugin.extract({
 use: loaders,
 fallback: 'vue-style-loader',
 publicPath: '../../'
 })
} else {
 return ['vue-style-loader'].concat(loaders)
}

再次打包部署,发现此时的图片访问路径为'../../static/img/bg.png';

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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
jQuery之折叠面板的深入解析
Jun 19 Javascript
js数组中如何随机取出一个值
Jun 13 Javascript
JS使用for循环遍历Table的所有单元格内容
Aug 21 Javascript
JS小游戏之仙剑翻牌源码详解
Sep 25 Javascript
了不起的node.js读书笔记之mongodb数据库交互
Dec 22 Javascript
js使用setTimeout实现定时炸弹的方法
Apr 10 Javascript
js限制文本框的输入内容代码分享(3类)
Aug 20 Javascript
JS实现横向拉伸动感伸缩菜单效果代码
Sep 04 Javascript
实例讲解JS中setTimeout()的用法
Jan 28 Javascript
Bootstrap Table使用整理(四)之工具栏
Jun 09 Javascript
node.js文件上传重命名以及移动位置的示例代码
Jan 19 Javascript
小程序中的箭头函数的具体使用
Jun 19 Javascript
详解vue-cli@2.x项目迁移日志
Jun 06 #Javascript
详解新手使用vue-router传参时注意事项
Jun 06 #Javascript
vue-cli配置全局sass、less变量的方法
Jun 06 #Javascript
解决vue组件props传值对象获取不到的问题
Jun 06 #Javascript
webpack4之如何编写loader的方法步骤
Jun 06 #Javascript
vue 插件的方法代码详解
Jun 06 #Javascript
jquery+ajax实现上传图片并显示上传进度功能【附php后台接收】
Jun 06 #jQuery
You might like
PHP 获取客户端真实IP地址多种方法小结
2010/05/15 PHP
PHP获取网址的顶级域名函数代码
2012/09/24 PHP
php生成扇形比例图实例
2013/11/06 PHP
Yii1.1中通过Sql查询进行的分页操作方法
2017/03/16 PHP
javascript 进阶篇3 Ajax 、JSON、 Prototype介绍
2012/03/14 Javascript
node.js中的fs.readlinkSync方法使用说明
2014/12/17 Javascript
js密码强度校验
2015/11/10 Javascript
Underscore源码分析
2015/12/30 Javascript
js实现的页面矩阵图形变换特效
2016/01/26 Javascript
jQuery UI结合Ajax创建可定制的Web界面
2016/06/22 Javascript
JavaScript实现数组降维详解
2017/01/05 Javascript
JavaScript使用简单正则表达式的数据验证功能示例
2017/01/13 Javascript
微信小程序 定位到当前城市实现实例代码
2017/02/23 Javascript
JavaScript实现各种排序的代码详解
2017/08/28 Javascript
详解vscode中vue代码颜色插件
2018/10/11 Javascript
[02:08]2018年度CS GO枪械皮肤设计大赛优秀作者-完美盛典
2018/12/16 DOTA
跟老齐学Python之用while来循环
2014/10/02 Python
python实现从字典中删除元素的方法
2015/05/04 Python
Python多线程经典问题之乘客做公交车算法实例
2017/03/22 Python
Python只用40行代码编写的计算器实例
2017/05/10 Python
python下载图片实现方法(超简单)
2017/07/21 Python
pycharm运行出现ImportError:No module named的解决方法
2018/10/13 Python
Python 实现取矩阵的部分列,保存为一个新的矩阵方法
2018/11/14 Python
使用pyqt 实现重复打开多个相同界面
2019/12/13 Python
使用keras实现densenet和Xception的模型融合
2020/05/23 Python
python和JavaScript哪个容易上手
2020/06/23 Python
python hmac模块验证客户端的合法性
2020/11/07 Python
基于css3 animate制作绚丽的动画效果
2015/11/24 HTML / CSS
YOOX美国官方网站:全球著名的多品牌时尚网络概念店
2016/09/11 全球购物
美国网上书店:Barnes & Noble
2018/08/15 全球购物
博朗(Braun)俄罗斯官方商店:德国小家电品牌
2019/09/24 全球购物
生物化工工艺专业应届生求职信
2013/10/08 职场文书
经营理念标语
2014/06/21 职场文书
淘宝活动总结范文
2014/06/26 职场文书
艺术节开幕词
2015/01/28 职场文书
vue3不同环境下实现配置代理
2022/05/25 Vue.js