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:void(0)的真正含义实例分析
Aug 20 Javascript
JS backgroundImage控制
May 19 Javascript
javascript中callee与caller的用法和应用场景
Dec 08 Javascript
JavaScript判断是否为数字的4种方法及效率比较
Apr 01 Javascript
jQuery往textarea中光标所在位置插入文本的方法
Jun 26 Javascript
javascript实现日期时间动态显示示例代码
Sep 08 Javascript
JS中IP地址与整数相互转换的实现代码
Apr 10 Javascript
微信小程序中页面FOR循环和嵌套循环
Jun 21 Javascript
深入理解jquery的$.extend()、$.fn和$.fn.extend()
Jul 08 jQuery
js数据类型检测总结
Aug 05 Javascript
Element输入框带历史查询记录的实现示例
Jan 15 Javascript
RxJS的入门指引和初步应用
Jun 15 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 中英文语言转换类代码
2011/08/11 PHP
PHP语法自动检查的Vim插件
2014/08/11 PHP
Redis构建分布式锁
2017/03/28 PHP
Prototype使用指南之ajax
2007/01/10 Javascript
禁止JQuery中的load方法装载IE缓存中文件的方法
2009/09/11 Javascript
为jquery.ui.dialog 增加“在当前鼠标位置打开”的功能
2009/11/24 Javascript
Jquery Ajax学习实例4 向WebService发出请求,返回实体对象的异步调用
2010/03/16 Javascript
javascript实现TreeView 无刷新展开的实例代码
2013/07/13 Javascript
jquery单行文字向上滚动效果示例
2014/03/06 Javascript
nodejs实现的一个简单聊天室功能分享
2014/12/06 NodeJs
JavaScript function函数种类详解
2016/02/22 Javascript
easyui validatebox验证
2016/04/29 Javascript
xtemplate node.js 的使用方法实例解析
2016/08/22 Javascript
NODE.JS跨域问题的完美解决方案
2016/10/20 Javascript
解析JavaScript数组方法reduce
2016/12/12 Javascript
jQuery密码强度验证控件使用详解
2017/01/05 Javascript
微信小程序 MinUI组件库系列之badge徽章组件示例
2018/08/20 Javascript
vue prop属性传值与传引用示例
2019/11/13 Javascript
python解析html提取数据,并生成word文档实例解析
2018/01/22 Python
更换Django默认的模板引擎为jinja2的实现方法
2018/05/28 Python
Python嵌套列表转一维的方法(压平嵌套列表)
2018/07/03 Python
python脚本监控Tomcat服务器的方法
2018/07/06 Python
python多线程并发让两个LED同时亮的方法
2019/02/18 Python
pandas数据集的端到端处理
2019/02/18 Python
Python/Django后端使用PIL Image生成头像缩略图
2019/04/30 Python
如何用Python来搭建一个简单的推荐系统
2019/08/07 Python
使用python实现画AR模型时序图
2019/11/20 Python
python 使用多线程创建一个Buffer缓存器的实现思路
2020/07/02 Python
Html5插件教程之添加浏览器放大镜效果的商品橱窗
2016/01/07 HTML / CSS
Anya Hindmarch官网:奢侈设计师手袋及配饰
2018/11/15 全球购物
英国顶级足球鞋的领先零售商:Lovell Soccer
2019/08/27 全球购物
高中毕业生个人自我鉴定
2013/11/24 职场文书
学校2015年纠风工作总结
2015/05/15 职场文书
居安思危观后感
2015/06/11 职场文书
小学英语听课心得体会
2016/01/14 职场文书
springboot + mongodb 通过经纬度坐标匹配平面区域的方法
2021/11/01 MongoDB