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 相关文章推荐
javascript之学会吝啬 精简代码
Apr 25 Javascript
js(jQuery)获取时间的方法及常用时间类搜集
Oct 23 Javascript
禁止拷贝网页内容的js代码
Jan 22 Javascript
使用JQ来编写最基本的淡入淡出效果附演示动画
Oct 31 Javascript
jQuery+css实现的换页标签栏效果
Jan 27 Javascript
Bootstrap模仿起筷首页效果
May 09 Javascript
JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍
May 19 Javascript
微信小程序实现登录遮罩效果
Nov 01 Javascript
基于mpvue的简单弹窗组件mptoast使用详解
Aug 02 Javascript
JQuery 实现文件下载的常用方法分析
Oct 29 jQuery
使用js和canvas实现时钟效果
Sep 08 Javascript
在vue项目中引用Antv G2,以饼图为例讲解
Oct 28 Javascript
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数据库类
2009/05/27 PHP
PHP伪静态Rewrite设置之APACHE篇
2014/07/30 PHP
Thinkphp和Bootstrap结合打造个性的分页样式(推荐)
2016/08/01 PHP
JQuery select控件的相关操作实现代码
2012/09/14 Javascript
jquery中filter方法用法实例分析
2015/02/06 Javascript
整理Javascript基础入门学习笔记
2015/11/29 Javascript
老生常谈onBlur事件与onfocus事件(js)
2016/07/09 Javascript
jq stop()和:is(:animated)的用法及区别(详解)
2017/02/12 Javascript
ActiveX控件的使用-js实现打印超市小票功能代码详解
2017/11/22 Javascript
node.js将MongoDB数据同步到MySQL的步骤
2017/12/10 Javascript
原生JS实现DOM加载完成马上执行JS代码的方法
2018/09/07 Javascript
Android 自定义view仿微信相机单击拍照长按录视频按钮
2019/07/19 Javascript
VUE中使用HTTP库Axios方法详解
2020/02/05 Javascript
[02:57]DOTA2亚洲邀请赛小组赛第四日 赛事回顾
2015/02/02 DOTA
[01:08:00]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python生成随机图形验证码详解
2017/11/08 Python
有趣的python小程序分享
2017/12/05 Python
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
基于Python生成个性二维码过程详解
2020/03/05 Python
Windows下Anaconda安装、换源与更新的方法
2020/04/17 Python
用css3实现当鼠标移进去时当前亮其他变灰效果
2014/04/08 HTML / CSS
CSS3标注引用的出处和来源的方法
2020/02/25 HTML / CSS
一份Java笔试题
2012/02/21 面试题
数学专业毕业生自荐信
2013/11/10 职场文书
电大毕业生自我鉴定
2013/11/10 职场文书
詹天佑教学反思
2014/04/30 职场文书
公证委托书
2014/08/01 职场文书
开展党的群众路线教育实践活动情况汇报
2014/11/05 职场文书
孝老爱亲事迹材料
2014/12/24 职场文书
卫生院艾滋病宣传活动总结
2015/05/09 职场文书
2015年高二班主任工作总结
2015/05/25 职场文书
元旦联欢晚会主持词
2015/07/01 职场文书
2015年环境监察工作总结
2015/07/23 职场文书
大学宣传委员竞选稿
2015/11/19 职场文书
Mysql中where与on的区别及何时使用详析
2021/08/04 MySQL
Redis实战高并发之扣减库存项目
2022/04/14 Redis