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 相关文章推荐
srcElement表格样式
Sep 03 Javascript
JS宝典学习笔记(下)
Jan 10 Javascript
拉动滚动条加载数据的jquery代码
May 03 Javascript
深入了解Node.js中的一些特性
Sep 25 Javascript
JavaScript实现删除,移动和复制文件的方法
Aug 05 Javascript
jQuery实现底部浮动窗口效果
Sep 07 Javascript
详解Sea.js中Module.exports和exports的区别
Feb 12 Javascript
关于jQuery EasyUI 中刷新Tab选项卡后一个页面变形的解决方法
Mar 02 Javascript
js对象实例详解(JavaScript对象深度剖析,深度理解js对象)
Sep 21 Javascript
基于IView中on-change属性的使用详解
Mar 15 Javascript
如何理解Vue的v-model指令的使用方法
Jul 19 Javascript
jQuery实现每日秒杀商品倒计时功能
Sep 06 jQuery
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调用Java对象的方法
2006/10/09 PHP
php zend解密软件绿色版测试可用
2008/04/14 PHP
php简单创建zip压缩文件的方法
2016/04/30 PHP
CodeIgniter连贯操作的底层原理分析
2016/05/17 PHP
PHP设计模式之工厂模式实例总结
2017/09/01 PHP
基于PHP+Mysql简单实现了图书购物车系统的实例详解
2020/08/06 PHP
php swoft框架实例用法
2020/12/22 PHP
无语,javascript居然支持中文(unicode)编程!
2007/04/12 Javascript
jQuery TextBox自动完成条
2009/07/22 Javascript
加载jQuery后$冲突的解决办法
2010/07/09 Javascript
javascript 随机展示头像实现代码
2011/12/06 Javascript
jQuery中的pushStack实现原理和应用实例
2015/02/03 Javascript
浅谈javascript的call()、apply()、bind()的用法
2016/02/21 Javascript
Angular2  NgModule 模块详解
2016/10/19 Javascript
详解基于angular路由的requireJs按需加载js
2017/01/20 Javascript
bootstrap table使用入门基本用法
2017/05/24 Javascript
vue基于mint-ui实现城市选择三级联动
2020/06/30 Javascript
微信小程序实现美团菜单
2018/06/06 Javascript
Vue $emit $refs子父组件间方法的调用实例
2018/09/12 Javascript
webpack配置proxyTable时pathRewrite无效的解决方法
2018/12/13 Javascript
详解Vue.directive 自定义指令
2019/03/27 Javascript
浅谈Express.js解析Post数据类型的正确姿势
2019/05/30 Javascript
js实现验证码功能
2020/07/24 Javascript
Vue数组响应式操作及高阶函数使用代码详解
2020/08/01 Javascript
Python函数可变参数定义及其参数传递方式实例详解
2015/05/25 Python
python转换字符串为摩尔斯电码的方法
2015/07/06 Python
对matplotlib改变colorbar位置和方向的方法详解
2018/12/13 Python
Python中常见的数制转换有哪些
2020/05/27 Python
Python预测2020高考分数和录取情况
2020/07/08 Python
HTML5 虚拟键盘出现挡住输入框的解决办法
2017/02/14 HTML / CSS
市场部专员岗位职责
2013/11/30 职场文书
干部下基层实施方案
2014/03/14 职场文书
党员一帮一活动总结
2014/07/08 职场文书
工伤事故赔偿协议书
2014/10/27 职场文书
情况说明书怎么写
2015/10/08 职场文书
python opencv通过按键采集图片源码
2021/05/20 Python