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 onkeydown,onkeyup,onkeypress,onclick,ondblclick
Feb 04 Javascript
js ondocumentready onmouseover onclick onmouseout 样式
Jul 22 Javascript
Javascript获取HTML静态页面参数传递值示例
Aug 18 Javascript
使用js判断控件是否获得焦点
Jan 03 Javascript
js/jquery获取文本框输入焦点的方法
Mar 04 Javascript
jquery库或JS文件在eclipse下报错问题解决方法
Apr 17 Javascript
vuejs在解析时出现闪烁的原因及防止闪烁的方法
Sep 19 Javascript
javaScript中封装的各种写法示例(推荐)
Jul 03 Javascript
JavaScript实现设置默认日期范围为最近40天的方法分析
Jul 12 Javascript
JavaScript寄生组合式继承实例详解
Jan 06 Javascript
解析Angular 2+ 样式绑定方式
Jan 15 Javascript
详解写好JS条件语句的5条守则
Feb 28 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
用session做客户验证时的注意事项
2006/10/09 PHP
Javascript技术技巧大全(五)
2007/01/22 Javascript
基于jquery循环map功能的代码
2011/02/26 Javascript
html页面显示年月日时分秒和星期几的两种方式
2013/08/20 Javascript
javascript常见数据验证插件大全
2015/08/03 Javascript
JS拖动鼠标画出方框实现鼠标选区的方法
2015/08/05 Javascript
Javascript简单实现面向对象编程继承实例代码
2015/11/27 Javascript
简单谈谈javascript中this的隐式绑定
2016/02/22 Javascript
使用jquery.form.js实现图片上传的方法
2016/05/05 Javascript
谈谈jQuery之Deferred源码剖析
2016/12/19 Javascript
requirejs按需加载angularjs文件实例
2017/06/08 Javascript
AngularJS中下拉框的基本用法示例
2017/10/11 Javascript
phantomjs导出html到pdf的方法总结
2017/10/19 Javascript
switchery按钮的使用方法
2017/12/18 Javascript
nodejs中用npm初始化来创建package.json的实例讲解
2018/10/10 NodeJs
vue中如何实现后台管理系统的权限控制的方法步骤
2019/09/05 Javascript
Vue中axios拦截器如何单独配置token
2019/12/27 Javascript
react+antd 递归实现树状目录操作
2020/11/02 Javascript
Pyhton中防止SQL注入的方法
2015/02/05 Python
Python中AND、OR的一个使用小技巧
2015/02/18 Python
python使用matplotlib绘制柱状图教程
2017/02/08 Python
Python实现解析Bit Torrent种子文件内容的方法
2017/08/29 Python
Python将DataFrame的某一列作为index的方法
2018/04/08 Python
NumPy 基本切片和索引的具体使用方法
2019/04/24 Python
python3中的eval和exec的区别与联系
2019/10/10 Python
Python如何爬取51cto数据并存入MySQL
2020/08/25 Python
Python描述数据结构学习之哈夫曼树篇
2020/09/07 Python
戴尔美国官网:Dell
2016/08/31 全球购物
巴黎卡诗加拿大官网:Kérastase加拿大
2018/11/12 全球购物
Europcar意大利:汽车租赁
2019/07/07 全球购物
幼儿园保育员责任书
2014/07/22 职场文书
初三英语教学计划
2015/01/23 职场文书
工艺技术员岗位职责
2015/02/04 职场文书
安全教育第一课观后感
2015/06/17 职场文书
python基于机器学习预测股票交易信号
2021/05/25 Python
ubuntu开机后ROS程序自启动问题
2022/12/24 Servers