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 赋值机制详解
Nov 23 Javascript
jquery让指定的元素闪烁显示的方法
Mar 17 Javascript
Jquery注册事件实现方法
May 18 Javascript
JS中dom0级事件和dom2级事件的区别介绍
May 05 Javascript
微信小程序 绘图之饼图实现
Oct 24 Javascript
老生常谈的跨域处理
Jan 11 Javascript
AngularJS ionic手势事件的使用总结
Aug 09 Javascript
简单谈谈关于Angular Cli打包的事
Sep 05 Javascript
如何从头实现一个node.js的koa框架
Jun 17 Javascript
jQuery操作元素追加内容示例
Jan 10 jQuery
基于VSCode调试网页JavaScript代码过程详解
Jul 20 Javascript
vue print.js打印支持Echarts图表操作
Nov 13 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
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
MySQL授权问题总结
2007/05/06 PHP
PHP制作百度词典查词采集器
2015/01/29 PHP
PHP、Python和Javascript的装饰器模式对比
2015/02/03 PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
2017/05/02 PHP
项目实践之javascript技巧
2007/12/06 Javascript
js word表格动态添加代码
2010/06/07 Javascript
node.js中的fs.chmodSync方法使用说明
2014/12/18 Javascript
使用JavaScript实现旋转的彩圈特效
2015/06/23 Javascript
基于Bootstrap使用jQuery实现输入框组input-group的添加与删除
2016/05/03 Javascript
浅谈js图片前端预览之filereader和window.URL.createObjectURL
2016/06/30 Javascript
phantomjs导出html到pdf的方法总结
2017/10/19 Javascript
Three.js 再探 - 写一个微信跳一跳极简版游戏
2018/01/04 Javascript
微信小程序倒计时功能实例代码
2018/07/17 Javascript
Vue2.0 实现页面缓存和不缓存的方式
2019/11/12 Javascript
JS定时器如何实现提交成功提示功能
2020/06/12 Javascript
[01:14]3.19DOTA2发布会 三代刀塔人第二代
2014/03/25 DOTA
python正则表达式抓取成语网站
2013/11/20 Python
在Python下进行UDP网络编程的教程
2015/04/29 Python
python 字符串转列表 list 出现\ufeff的解决方法
2017/06/22 Python
python requests 使用快速入门
2017/08/31 Python
详解python opencv、scikit-image和PIL图像处理库比较
2019/12/26 Python
屈臣氏乌克兰:Watsons UA
2019/10/29 全球购物
数字漫画:comiXology
2020/06/13 全球购物
Linux面试题LINUX系统类
2015/11/25 面试题
小学二年级评语
2014/04/21 职场文书
电力安全事故反思
2014/04/27 职场文书
信用卡结清证明怎么写
2014/09/13 职场文书
企业群众路线教育实践活动心得体会
2014/11/03 职场文书
先进工作者申报材料
2014/12/23 职场文书
监护人证明
2015/06/19 职场文书
病房管理制度范本
2015/08/06 职场文书
python实现层次聚类的方法
2021/11/01 Python
十大最帅动漫男主 碓冰拓海上榜,第一是《灌篮高手》男主角
2022/03/18 日漫
python实现手机推送 代码也就10行左右
2022/04/12 Python
利用Python脚本写端口扫描器socket,python-nmap
2022/07/23 Python