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 相关文章推荐
Javascript 布尔型分析
Dec 22 Javascript
javascript 图片裁剪技巧解读
Nov 15 Javascript
Jquery获取复选框被选中值的简单方法
Jul 04 Javascript
jquery实现table鼠标经过变色代码
Sep 25 Javascript
解析JavaScript中delete操作符不能删除的对象
Dec 03 Javascript
javascript 用函数语句和表达式定义函数的区别详解
Jan 06 Javascript
输入框过滤非数字的js代码
Sep 18 Javascript
Javascript6中字符串的四个新用法分享
Sep 11 Javascript
AngularJS路由Ui-router模块用法示例
May 29 Javascript
在Vue组件化中利用axios处理ajax请求的使用方法
Aug 25 Javascript
自制简易打赏功能的实例
Sep 02 Javascript
layui的面包屑或者表单不显示的解决方法
Sep 05 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递归列出所有文件和目录的代码
2008/09/10 PHP
php+mysql大量用户登录解决方案分析
2014/12/29 PHP
php实现统计网站在线人数的方法
2015/05/12 PHP
yii2.0框架场景的简单使用示例
2020/01/25 PHP
JObj预览一个JS的框架
2008/03/13 Javascript
ext for eclipse插件安装方法
2008/04/27 Javascript
js修改地址栏URL参数解决url参数问题
2012/12/15 Javascript
javascript 循环调用示例介绍
2013/11/20 Javascript
js事件监听器用法实例详解
2015/06/01 Javascript
JS实现转动随机数抽奖特效代码
2020/04/16 Javascript
angularjs 源码解析之scope
2016/08/22 Javascript
Vue编写多地区选择组件
2017/08/21 Javascript
python网页请求urllib2模块简单封装代码
2014/02/07 Python
python文件读写并使用mysql批量插入示例分享(python操作mysql)
2014/02/17 Python
Python开发WebService系列教程之REST,web.py,eurasia,Django
2014/06/30 Python
python django集成cas验证系统
2014/07/14 Python
python使用多进程的实例详解
2018/09/19 Python
详解Python学习之安装pandas
2019/04/16 Python
Django上线部署之IIS的配置方法
2019/08/22 Python
Python3 A*寻路算法实现方式
2019/12/24 Python
Python3实现发送邮件和发送短信验证码功能
2020/01/07 Python
matplotlib jupyter notebook 图像可视化 plt show操作
2020/04/24 Python
pandas 数据类型转换的实现
2020/12/29 Python
css3 盒模型以及box-sizing属性全面了解
2016/09/20 HTML / CSS
AVON雅芳官网:世界上最大的美容化妆品公司之一
2016/11/02 全球购物
欧舒丹澳洲版:L’OCCITANE
2017/07/17 全球购物
PHP高级工程师面试问题推荐
2013/01/18 面试题
物流毕业生个人的自我评价
2014/02/13 职场文书
医学生临床实习自我评价
2014/03/07 职场文书
公务员试用期满考核材料
2014/05/22 职场文书
新闻学专业职业生涯规划范文:我的人生我做主
2014/09/12 职场文书
乡镇干部先进性教育活动个人整改措施
2014/09/16 职场文书
营运督导岗位职责
2015/04/10 职场文书
2015年老干部工作总结
2015/04/23 职场文书
远程教育培训心得体会
2016/01/09 职场文书
python中pymysql包操作数据库方法
2022/04/19 Python