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 相关文章推荐
jqgrid 简单学习笔记
May 03 Javascript
JavaScript显示当然日期和时间即年月日星期和时间
Oct 29 Javascript
jQuery+css3实现文字跟随鼠标的上下抖动
Jul 31 Javascript
复杂的javascript窗口分帧解析
Feb 19 Javascript
TypeScript Type Innference(类型判断)
Mar 10 Javascript
真正好用的js验证上传文件大小的简单方法
Oct 27 Javascript
jQuery Tree Multiselect使用详解
May 02 jQuery
layui选项卡效果实现代码
May 19 Javascript
Vue.js与 ASP.NET Core 服务端渲染功能整合
Nov 16 Javascript
js+html5 canvas实现ps钢笔抠图
Apr 28 Javascript
layui实现数据表格table分页功能(ajax异步)
Jul 27 Javascript
使用layui日期控件laydate对开始和结束时间进行联动控制的方法
Sep 06 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
打造计数器DIY三步曲(下)
2006/10/09 PHP
摘自织梦CMS的HTTP文件下载类
2015/08/08 PHP
jquery不支持toggle()高(新)版本的问题解决
2016/09/24 PHP
PHP执行普通shell命令流程解析
2020/08/24 PHP
Google 静态地图API实现代码
2010/11/19 Javascript
用按钮控制iframe显示的网页实现方法
2013/02/04 Javascript
让图片旋转任意角度及JQuery插件使用介绍
2013/03/20 Javascript
JavaScript的作用域和块级作用域概念理解
2014/09/21 Javascript
使用JS+plupload直接批量上传图片到又拍云
2014/12/01 Javascript
探讨JavaScript标签位置的存放与功能有无关系
2016/01/15 Javascript
jQuery 如何实现一个滑动按钮开关
2016/12/01 Javascript
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
2016/12/14 Javascript
[Bootstrap-插件使用]Jcrop+fileinput组合实现头像上传功能实例代码
2016/12/20 Javascript
js通过keyCode值判断单击键盘上某个键,然后触发指定的事件方法
2017/02/19 Javascript
jQuery控制元素隐藏和显示
2017/03/03 Javascript
vue实现axios图片上传功能
2019/08/20 Javascript
python模块restful使用方法实例
2013/12/10 Python
python构造icmp echo请求和实现网络探测器功能代码分享
2014/01/10 Python
Python collections模块实例讲解
2014/04/07 Python
Python中的字典遍历备忘
2015/01/17 Python
解决Shell执行python文件,传参空格引起的问题
2018/10/30 Python
如何使用django的MTV开发模式返回一个网页
2019/07/22 Python
PyCharm使用之配置SSH Interpreter的方法步骤
2019/12/26 Python
机电专业体育教师求职信
2013/09/21 职场文书
理想演讲稿范文
2014/05/21 职场文书
经典团队口号大全
2014/06/21 职场文书
2014年党的群众路线教育实践活动整改措施(个人版)
2014/09/25 职场文书
党员领导干部民主生活会批评与自我批评发言
2014/09/28 职场文书
夫妻忠诚协议范文
2014/11/16 职场文书
督导岗位职责范本
2015/04/10 职场文书
聚众斗殴罪辩护词
2015/05/21 职场文书
十二月早安励志心语大全
2019/12/03 职场文书
Java并发编程之Executor接口的使用
2021/06/21 Java/Android
Win11 Build 22000.51版本文件资源管理器“命令栏”和上下文菜单有什么新变化?
2021/11/21 数码科技
python中的getter与setter你了解吗
2022/03/24 Python
关于pytest结合csv模块实现csv格式的数据驱动问题
2022/05/30 Python