详解vue静态资源打包中的坑与解决方案


Posted in Javascript onFebruary 05, 2018

本文主要解决

①.vue-cli默认配置打包后部署至特定路径下静态资源路径错误问题;

②.静态资源打包使用相对路径后css文件引入大图片路径错误问题。

1、问题

vue-cli 脚手架生成的默认打包配置文件情况下运行 npm run build 打包后,部署项目至特定路径下:如:

//ip:port/public/springActivity/

此时访问:

http://ip:port/public/springActivity/index.html

index.html 可以正常访问,但是引用的js,css等文件服务器响应均为404,查看引入的资源路径如下:

http://ip:port/static/css/app.cea07642cd24c0d7a5c4b9b7afc7ff64.css
http://ip:port/static/js/app.815851e87b083afb82bf.js

2、分析

由上可以看出是资源打包路径有误,打包后的资源使用了绝对根目录路径,因此将项目部署到特定目录下,其引入的资源路径无法被正确解析。

3、解决

在打包时需要使用相对路径来处理静态资源,更改build中资源发布路径配置(config/index.js, build对象):

将 assetsPublicPath: '/'  改为  assetsPublicPath: './',
再次打包,并将资源部署到特定路径下,然后访问:

此时index.html可以正常访问,同时js和css资源也可以正常访问,但是css中引入的assets目录下的大图片资源出错了(服务端404)

4. 再分析

查看引入的图片资源路径如下:

http://ip:port/public/springActivity/static/css/static/img/question_bg.61a2825.png

实际项目中资源路径如下:

index.html
static/
 |--js/
  |--*.js
 |--css/
  |--*.css
 |--img/
  |--*.png

很明显图片引入路径有误。分析图片引入路径,发现路径均多了"/static/css"两层目录,猜测是css目录下的css文件引入图片路径为"/static/img/question_bg.61a2825.png" , 查看css文件,css中引入图片路径如下:

background:url(static/img/question_bg.61a2825.png)

5、在解决

css文件中路径存在问题,肯定又是打包哪个环节资源路径没有配置好,分析打包过程,css是在js中引入的或是写在vue文件中的,css文件首先被less,postcss等处理,处理后会被ExtractTextPlugin处理,ExtractTextPlugin将js中的css全部抽离至app.css文件中。

首先将options.extract设为false,关闭抽离css功能,再次打包并部署至特定目录,访问:http://ip:port/public/springActivity/index.html, 啪,页面正常显示,大公即将告成。

分析打包后的文件,发现没有了css文件,发现css文件全部在app.js文件中;通过js将css注入 index.html文件中,因此css文件中引入的图片资源路径应该是相对于index.html文件路径的,即:"static/img/question_bg.61a2825.png",这与下面css文件中的图片资源路径一致,因此图片能够被正常访问。

background:url(static/img/question_bg.61a2825.png)
现在很确定知道问题出在哪了,即:ExtractTextPlugin抽离css文件时没有转换资源引入路径,导致app.css引入了相对app.css目录为"static/img/ .png"的静态资源,该路径相对index.html即为:static/css/static/img/ .png。

因此使用ExtractTextPlugin插件时还需要配置静态资源路径参数,通过查询资料,得知可以通过添加publicPath:"../../"解决该问题:

if (options.extract) {
 return ExtractTextPlugin.extract({
 use: loaders,
 fallback: 'vue-style-loader',
 publicPath:"../../"     //添加
 })
}

打包部署到特定目录下后访问index.html文件,页面一切正常,app.css文件正常引入,图片资源也正常引入,查看app.css文件引入图片资源方式如下:

background:url(../../static/img/question_bg.61a2825.png

publicPath配置后,css文件中引入的图片文件路径前添加了该路径配置;

publicPath 属性值为打包后的 app.css文件至index.html文件的相对路径

图片资源也可以直接放在vue-cli生成的static目录下规避上述问题,但是通过这种方式图片名称中无法增加md5字符串,不利于版本控制

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
关于javascript中的parseInt使用技巧
Sep 03 Javascript
Extjs4.0设置Ext.data.Store传参的请求方式(默认为GET)
Apr 02 Javascript
js对列表中第一个值处理与jsp页面对列表中第一个值处理的区别详解
Nov 05 Javascript
javascript面向对象特性代码实例
Jun 12 Javascript
javascript 闭包详解
Jul 02 Javascript
jquery实现LED广告牌旋转系统图片切换效果代码分享
Aug 26 Javascript
JS实现css hover操作的方法示例
Apr 07 Javascript
BootStrap 页签切换失效的解决方法
Aug 17 Javascript
js实现手机web图片左右滑动效果
Dec 29 Javascript
微信小程序实现页面下拉刷新和上拉加载功能详解
Dec 03 Javascript
vue history 模式打包部署在域名的二级目录的配置指南
Jul 02 Javascript
微信小程序8种数据通信的方式小结
Feb 03 Javascript
理解Koa2中的async&await的用法
Feb 05 #Javascript
zTree 树插件实现全国五级地区点击后加载的示例
Feb 05 #Javascript
使用vue如何构建一个自动建站项目
Feb 05 #Javascript
在 webpack 中使用 ECharts的实例详解
Feb 05 #Javascript
在Vue中使用echarts的方法
Feb 05 #Javascript
JavaScript中Object基础内部方法图
Feb 05 #Javascript
基于axios封装fetch方法及调用实例
Feb 05 #Javascript
You might like
php-cli简介(不会Shell语言一样用Shell)
2013/06/03 PHP
PHP闭包函数详解
2016/02/13 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
jquery 图片 上一张 下一张 链接效果(续篇)
2010/04/20 Javascript
javascript中interval与setTimeOut的区别示例介绍
2014/03/14 Javascript
基于JavaScript创建动态Dom
2015/12/08 Javascript
jQuery代码实现对话框右上角菜单带关闭×
2016/05/03 Javascript
JS中的==运算: [''] == false —>true
2016/07/24 Javascript
Express之get,pos请求参数的获取
2017/05/02 Javascript
Vue.js中数据绑定的语法教程
2017/06/02 Javascript
深入理解Webpack 中路径的配置
2017/06/17 Javascript
vue组件三大核心概念图文详解
2019/05/30 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
2020/01/18 Javascript
vue实现一个获取按键展示快捷键效果的Input组件
2021/01/13 Vue.js
[02:11]DOTA2上海特级锦标赛主赛事第二日RECAP
2016/03/04 DOTA
详解Django框架中的视图级缓存
2015/07/23 Python
python导入csv文件出现SyntaxError问题分析
2017/12/15 Python
python3实现跳一跳点击跳跃
2018/01/08 Python
python机器学习理论与实战(二)决策树
2018/01/19 Python
python使用adbapi实现MySQL数据库的异步存储
2019/03/19 Python
Python实现去除图片中指定颜色的像素功能示例
2019/04/13 Python
python 利用jinja2模板生成html代码实例
2019/10/10 Python
python中文分词库jieba使用方法详解
2020/02/11 Python
Python如何在main中调用函数内的函数方式
2020/06/01 Python
python interpolate插值实例
2020/07/06 Python
Python之qq自动发消息的示例代码
2021/02/18 Python
英国的知名精品百货公司:House of Fraser(福来德)
2016/08/14 全球购物
Willer台湾:日本高速巴士/夜行巴士预约
2017/07/09 全球购物
环保专业大学生职业规划设计
2014/01/10 职场文书
2015年小学生新年寄语
2014/12/08 职场文书
单身申明具结书
2015/02/26 职场文书
2015年教师自我评价范文
2015/03/04 职场文书
学习型家庭事迹材料(2016精选版)
2016/02/29 职场文书
XX部保密工作制度范本
2019/08/27 职场文书
pandas中关于apply+lambda的应用
2022/02/28 Python
zabbix配置nginx监控的实现
2022/05/25 Servers