webpack配置打包后图片路径出错的解决


Posted in Javascript onApril 26, 2018

问题

项目在开发环境下工作正常,当打包后图片不见了,检查元素后发现路径出错了。

图片路径是这样:background: url(/static/img/bg_camera_tip.bd37151.png),但该路径下文件并不存在。

打包后文件目录如下:

webpack配置打包后图片路径出错的解决

可以看到背景图片的路径应该是../../static而实际却是/static,找到原因后就好解决了

方法一

查看build目录下webpack.base.conf.js的配置,图片文件会经过url-loader处理。

module: {
  rules: [
   ...
   {
    test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
    loader: 'url-loader',
    options: {
     limit: 10000,
     name: utils.assetsPath('img/[name].[hash:7].[ext]')
    }
   },
   ...
  ]
 }

它的作用是当文件大小小于limit限制时会返回一个base64串,其实就是把图片资源编码为base64串放在CSS文件里,这样就可以减少一次网络请求,因为每一张图片都是需要从服务端去下载的。但是如果文件太大了就会导致base64串很长,那放在CSS文件里面就会导致文件很大,CSS的文件下载时间变长,就得不偿失了,所以会有一个limit参数,在这个范围内的才会被转成base64串,它的单位是字节。对于这个问题,该loader还提供了一个publicPath参数,目的是修改引用的图片地址,默认是当前路径,那直接改它就可以了,即在options节点下添加一个参数publicPath: '../../'。

module: {
  rules: [
   ...
   {
    test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
    loader: 'url-loader',
    options: {
     limit: 10000,
     publicPath: '../../', //你实际项目的引用地址前缀
     name: utils.assetsPath('img/[name].[hash:7].[ext]')
    }
   },
   ...
  ]
 }

方法二

webpack.base.conf.js里还有一条规则,每一个vue文件都会经过vueLoaderConfig处理

module: {
  rules: [
   {
    test: /\.vue$/,
    loader: 'vue-loader',
    options: vueLoaderConfig
   },
   ...
  ]
 }

vueLoaderConfig位于build/vue-loader.conf.js,它又调用了build/utils.js的cssLoaders的方法。

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

如果是生产环境options.extract值为true,会调用这个ExtractTextPlugin插件做处理,它的作用是抽离项目中引用的样式文件到一个独立的CSS文件中,这样就可以一次加载所有的CSS文件,相当于CSS文件并行加载,可以减少网络请求次数,更多优点及使用可以查看ExtractTextWebpackPlugin。回到这个问题,它还有一个参数就是publicPath,可以覆盖所指定的loader的publicPath配置,那么就跟前面的配置一样,可以给所有的loader统一配置引用文件的路径地址。

另外这里的user:loader实际上是返回一系列的loader的集合,cssLoaders的返回是

return {
  css: generateLoaders(),
  postcss: generateLoaders(),
  less: generateLoaders('less'),
  sass: generateLoaders('sass', { indentedSyntax: true }),
  scss: generateLoaders('sass'),
  stylus: generateLoaders('stylus'),
  styl: generateLoaders('stylus')
 }

这也就是即便你没有在webpack.base.conf.js中配置sass-loader也能使用SASS语法的原因。

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

Javascript 相关文章推荐
js几个验证函数代码
Mar 25 Javascript
JS 实现完美include载入实现代码
Aug 05 Javascript
js控制滚动条缓慢滚动到顶部实现代码
Mar 20 Javascript
基于jquery实现的定时显示与隐藏div广告的实现代码
Aug 22 Javascript
JS弹出新窗口被拦截的解决方法
Aug 09 Javascript
web.js.字符串与正则表达式操作
May 13 Javascript
利用ES6的Promise.all实现至少请求多长时间的实例
Aug 28 Javascript
JavaScript正则表达式函数总结(常用)
Feb 22 Javascript
详解vuex的简单使用
Mar 12 Javascript
怎么使用javascript深度拷贝一个数组
Jun 06 Javascript
Layer+Echarts构建弹出层折线图的方法
Sep 25 Javascript
vue3使用vue-count-to组件的实现
Dec 25 Vue.js
jQuery实现的点击标题文字切换字体效果示例【测试可用】
Apr 26 #jQuery
jQuery实现通过方向键控制div块上下左右移动的方法【测试可用】
Apr 26 #jQuery
Javasript设计模式之链式调用详解
Apr 26 #Javascript
在vue-cli搭建的项目中增加后台mock接口的方法
Apr 26 #Javascript
vue 做移动端微信公众号采坑经验记录
Apr 26 #Javascript
jQuery length 和 size()区别总结
Apr 26 #jQuery
Hexo已经看腻了,来手把手教你使用VuePress搭建个人博客
Apr 26 #Javascript
You might like
php 将excel导入mysql
2009/11/09 PHP
MySQL连接数超过限制的解决方法
2011/07/17 PHP
apache配置虚拟主机的方法详解
2013/06/17 PHP
CodeIgniter框架提示Disallowed Key Characters的解决办法
2014/04/21 PHP
php中通过eval实现字符串格式的计算公式
2017/03/18 PHP
Extjs表单常见验证小结
2014/03/07 Javascript
JQuery遍历json数组的3种方法
2014/11/08 Javascript
jQuery判断指定id的对象是否存在的方法
2015/05/22 Javascript
充分发挥Node.js程序性能的一些方法介绍
2015/06/23 Javascript
jQuery实现表单步骤流程导航代码分享
2015/08/28 Javascript
js自定义弹框插件的封装
2020/08/24 Javascript
JS实现的数组去除重复数据算法小结
2017/11/17 Javascript
如何在js代码中消灭for循环实例详解
2018/07/29 Javascript
JS无限级导航菜单实现方法
2019/01/05 Javascript
vue+springboot图片上传和显示的示例代码
2020/02/14 Javascript
微信小程序自定义联系人弹窗
2020/05/26 Javascript
详解Webpack4多页应用打包方案
2020/07/16 Javascript
vue 中this.$set 动态绑定数据的案例讲解
2021/01/29 Vue.js
python中使用urllib2获取http请求状态码的代码例子
2014/07/07 Python
python3+PyQt5实现自定义窗口部件Counters
2018/04/20 Python
python实现整数的二进制循环移位
2019/03/08 Python
python二维码操作:对QRCode和MyQR入门详解
2019/06/24 Python
python requests库爬取豆瓣电视剧数据并保存到本地详解
2019/08/10 Python
opencv 获取rtsp流媒体视频的实现方法
2019/08/23 Python
pytorch对梯度进行可视化进行梯度检查教程
2020/02/04 Python
Chupi官网:在爱尔兰手工制作的订婚、结婚戒指和精美珠宝
2020/09/28 全球购物
策划助理岗位职责
2013/11/18 职场文书
军训生自我鉴定范文
2013/12/27 职场文书
特色蛋糕店创业计划书
2014/01/28 职场文书
高二化学教学反思
2014/01/30 职场文书
教师自查自纠材料
2014/10/14 职场文书
全国法制宣传日活动总结2014
2014/11/01 职场文书
交警失职检讨书
2015/01/26 职场文书
2015年物资管理工作总结
2015/05/20 职场文书
教你怎么用Python实现多路径迷宫
2021/04/29 Python
Django数据库(SQlite)基本入门使用教程
2022/07/07 Python