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 相关文章推荐
取得一定长度的内容,处理中文
Dec 20 Javascript
JSDoc 介绍使用规范JsDoc的使用介绍
Feb 12 Javascript
jQuery固定浮动侧边栏实现思路及代码
Sep 28 Javascript
JavaScript实现将文本框的值插入指定位置的方法
Aug 13 Javascript
jquery+json实现分页效果
Mar 07 Javascript
js改变css样式的三种方法推荐
Jun 28 Javascript
微信小程序 教程之注册页面
Oct 17 Javascript
jQuery快速实现商品数量加减的方法
Feb 06 Javascript
vue forEach循环数组拿到自己想要的数据方法
Sep 21 Javascript
Vue+element 解决浏览器自动填充记住的账号密码问题
Jun 11 Javascript
vue cli4下环境变量和模式示例详解
Apr 09 Javascript
vue中watch的用法汇总
Dec 28 Vue.js
详解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
《五等分的花嫁》漫画完结!2020年10月第2期TV动画制作组换血!
2020/03/06 日漫
PHP框架Laravel学习心得体会
2015/10/28 PHP
Yii框架数据模型的验证规则rules()被执行的方法
2016/12/02 PHP
PHP笛卡尔积实现原理及代码实例
2020/12/09 PHP
JavaScript脚本性能的优化方法
2007/02/02 Javascript
Javascript this指针
2009/07/30 Javascript
Javascript 面向对象 继承
2010/05/13 Javascript
JavaScript 面向对象编程(2) 定义类
2010/05/18 Javascript
在vs2010中调试javascript代码方法
2011/02/11 Javascript
javascript 事件处理程序介绍
2012/06/27 Javascript
THREE.JS入门教程(2)着色器-上
2013/01/24 Javascript
封装获取dom元素的简单实例
2016/07/08 Javascript
纯js实现图片匀速淡入淡出效果
2017/08/22 Javascript
vue params、query传参使用详解
2017/09/12 Javascript
vue.js过滤器+ajax实现事件监听及后台php数据交互实例
2018/05/22 Javascript
layer弹出子iframe层父子页面传值的实现方法
2018/11/22 Javascript
javascript异常处理实现原理详解
2020/02/17 Javascript
[43:32]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS NewBee第一场
2014/05/26 DOTA
[47:04]LGD vs infamous Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
Python实现把回车符\r\n转换成\n
2015/04/23 Python
python3获取当前文件的上一级目录实例
2018/04/26 Python
python 通过类中一个方法获取另一个方法变量的实例
2019/01/22 Python
pyqt 实现为长内容添加滑轮 scrollArea
2019/06/19 Python
pytorch AvgPool2d函数使用详解
2020/01/03 Python
Python学习之路安装pycharm的教程详解
2020/06/17 Python
python 获取域名到期时间的方法步骤
2021/02/10 Python
Mio Skincare中文官网:肌肤和身体护理
2016/10/26 全球购物
TUMI澳大利亚网站:美国旅行箱包品牌
2017/03/27 全球购物
ProBikeKit新西兰:自行车套件,跑步和铁人三项装备
2017/04/05 全球购物
致200米运动员广播稿
2014/02/06 职场文书
婚前保证书范文
2015/02/28 职场文书
酒店前台岗位职责
2015/04/16 职场文书
雷锋的故事观后感
2015/06/10 职场文书
社交电商模式的兴起:这些新的商机千万别错过
2019/07/26 职场文书
2020年基层司法所建设情况调研报告
2019/11/30 职场文书
JS数组去重详情
2021/11/07 Javascript