≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 网络编程 > vue.js

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

人气:463 时间:2019-04-09

这篇文章主要为大家详细介绍了分析vue静态资源打包中的坑与解决方案,具有一定的参考价值,可以用来参考一下。

感兴趣的小伙伴,下面一起跟随四海网的小编两巴掌来看看吧!

本文主要解决

①.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字符串,不利于版本控制

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持四海网。

本文来自:http://www.q1010.com/184/4695-0.html

注:关于分析vue静态资源打包中的坑与解决方案的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:vue.js

您可能感兴趣的文章

  • 完美解决axios跨域请求出错的问题
  • vue中如何使用ztree
  • Vue.set()实现数据动态响应的方法
  • 基于axios封装fetch方法及调用实例
  • Vue组件通信的四种方式汇总
  • vue父组件点击触发子组件事件的实例讲解
  • vue中阻止click事件冒泡,防止触发另一个事件的方法
  • Vue.js 点击按钮显示/隐藏内容的实例代码
  • Vuejs 2.0 子组件访问/调用父组件的方法(示例代码)
  • 分析如何在vue项目中引入elementUI组件
上一篇:vue中实现在外部调用methods的方法(推荐)
下一篇:Vue.set()实现数据动态响应的方法
热门文章
  • Vue 报错TypeError: this.$set is not a function 的解决方法
  • vue实现动态添加数据滚动条自动滚动到底部的示例代码
  • vue项目设置scrollTop不起作用(总结)
  • vue项目中使用vue-i18n报错的解决方法
  • iview实现select tree树形下拉框的示例代码
  • 分析关于element级联选择器数据回显问题
  • vue项目打包后打开页面空白解决办法
  • 解决element ui select下拉框不回显数据问题的解决
  • element-ui table span-method(行合并)的实现代码
  • element-ui 设置菜单栏展开的方法
  • 最新文章
    • 理解vue ssr原理并自己搭建简单的ssr框架
    • vue favicon设置以及动态修改favicon的方法
    • vue-router启用history模式下的开发及非根目录部署方法
    • 从零开始在NPM上发布一个Vue组件的方法步骤
    • Element input树型下拉框的实现代码
    • Vue 报错TypeError: this.$set is not a function 的解决方法
    • Vue.js组件高级特性实例分析
    • 浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
    • 分析Vue.js自定义tipOnce指令用法实例
    • 浅谈vuex actions和mutation的异曲同工

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。