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 相关文章推荐
用Div仿showModalDialog模式菜单的效果的代码
Mar 05 Javascript
判断多个元素(RADIO,CHECKBOX等)是否被选择的原理说明
Feb 18 Javascript
picChange 图片切换特效的函数代码
May 06 Javascript
判断浏览器的javascript版本的代码
Sep 03 Javascript
js的onload事件及初始化按钮事件示例代码
Sep 25 Javascript
Jquery 复选框取值兼容FF和IE8(测试有效)
Oct 29 Javascript
DOM基础教程之使用DOM设置文本框
Jan 20 Javascript
Bootstrap Img 图片样式(推荐)
Dec 13 Javascript
微信小程序 石头剪刀布实例代码
Jan 04 Javascript
解决vue-cli脚手架打包后vendor文件过大的问题
Sep 27 Javascript
jquery实现自定义树形表格的方法【自定义树形结构table】
Jul 12 jQuery
js canvas实现五子棋小游戏
Jan 22 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 一个页面执行时间类代码
2010/03/05 PHP
获取URL文件名后缀
2013/10/24 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
2018/02/06 PHP
PHP文件类型检查及fileinfo模块安装使用详解
2019/05/09 PHP
php数值计算num类简单操作示例
2020/05/15 PHP
由JavaScript中call()方法引发的对面向对象继承机制call的思考
2011/09/12 Javascript
jquery表单验证使用插件formValidator
2012/11/10 Javascript
Js获取数组最大和最小值示例代码
2013/10/29 Javascript
一个简单的jQuery计算器实现了连续计算功能
2014/07/21 Javascript
JS基于cookie实现来宾统计记录访客信息的方法
2015/08/04 Javascript
javascript实现动态标签云
2015/10/16 Javascript
jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)
2016/05/27 Javascript
javascript实现table单元格点击展开隐藏效果(实例代码)
2017/04/10 Javascript
JS脚本实现网页自动秒杀点击
2018/01/11 Javascript
vuex实现登录状态的存储,未登录状态不允许浏览的方法
2018/03/09 Javascript
Angular6 用户自定义标签开发的实现方法
2019/01/08 Javascript
vue2.0自定义指令示例代码详解
2019/04/25 Javascript
Vue 引入AMap高德地图的实现代码
2019/04/29 Javascript
小程序中设置缓存过期的实现方法
2020/01/14 Javascript
Vue组件模板及组件互相引用代码实例
2020/03/11 Javascript
Python import用法以及与from...import的区别
2015/05/28 Python
python issubclass 和 isinstance函数
2019/07/25 Python
Python爬虫爬取Bilibili弹幕过程解析
2019/10/10 Python
Python+Appium实现自动化测试的使用步骤
2020/03/24 Python
CSS3中的content属性使用示例
2015/07/20 HTML / CSS
马来西亚网上购物:Youbeli
2018/03/30 全球购物
高一家长会邀请函
2014/01/12 职场文书
小学教师国培感言
2014/02/08 职场文书
护理专业自荐书
2014/06/04 职场文书
授权委托书格式
2014/07/31 职场文书
个人专业技术总结
2015/03/05 职场文书
黑白记忆观后感
2015/06/18 职场文书
退休劳动合同怎么写?
2019/10/25 职场文书
JS Object构造函数之Object.freeze
2021/04/28 Javascript
什么是动态刷新率DRR? Windows11动态刷新率功能介绍
2021/11/21 数码科技