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+jquery等)
Mar 24 Javascript
Javascript Object 对象学习笔记
Dec 17 Javascript
JS对字符串编码的几种方式使用指南
May 14 Javascript
js获取本机操作系统类型的两种方法
Dec 19 Javascript
AngularJS基础 ng-include 指令简单示例
Aug 01 Javascript
jQuery实现自动输入email、时间和域名的方法
Aug 24 Javascript
js点击按钮实现水波纹效果代码(CSS3和Canves)
Sep 15 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
Sep 23 Javascript
vue权限问题的完美解决方案
May 08 Javascript
JS实现获取当前所在周的周六、周日示例分析
May 11 Javascript
JS中的算法与数据结构之队列(Queue)实例详解
Aug 20 Javascript
jquery自定义组件实例详解
Dec 31 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
Discuz Uchome ajaxpost小技巧
2011/01/04 PHP
浅析php中如何在有限的内存中读取大文件
2013/07/02 PHP
php自定义函数转换html标签示例
2016/09/29 PHP
Laravel5.1自定义500错误页面示例
2016/10/09 PHP
ThinkPHP实现简单登陆功能
2017/04/28 PHP
phpwind放自动注册方法
2006/12/02 Javascript
js将long日期格式转换为标准日期格式实现思路
2013/04/07 Javascript
javascript通过className来获取元素的简单示例代码
2014/01/10 Javascript
jQuery支持动态参数将函数绑定到事件上的方法
2015/03/17 Javascript
在AngularJS应用中实现一些动画效果的代码
2015/06/18 Javascript
详解jQuery移动页面开发中的ui-grid网格布局使用
2015/12/03 Javascript
Javascript基础教程之比较null和undefined值
2016/05/16 Javascript
vue2.0 自定义日期时间过滤器
2017/06/07 Javascript
详解js几个绕不开的事件兼容写法
2017/08/30 Javascript
基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式
2018/01/17 Javascript
JS中的回调函数实例浅析
2018/03/21 Javascript
JavaScript判断浏览器运行环境的详细方法
2019/06/30 Javascript
JS控制只能输入数字并且最多允许小数点两位
2019/11/24 Javascript
vue中jsonp插件的使用方法示例
2020/09/10 Javascript
Python实现的一个简单LRU cache
2014/09/26 Python
Python探索之ModelForm代码详解
2017/10/26 Python
python 读取文件并替换字段的实例
2018/07/12 Python
Python清空文件并替换内容的实例
2018/10/22 Python
Python实现京东秒杀功能代码
2019/05/16 Python
windows中安装Python3.8.0的实现方法
2019/11/19 Python
python如何绘制疫情图
2020/09/16 Python
Matplotlib配色之Colormap详解
2021/01/05 Python
英国在线自行车商店:Evans Cycles
2016/09/26 全球购物
ProForm英国站点:健身房和健身器材网上商店
2019/06/05 全球购物
英国DIY汽车维修配件网站:DIY Car Service Parts
2019/08/30 全球购物
介绍JAVA 中的Collection FrameWork(及如何写自己的数据结构)
2014/10/31 面试题
小学生一分钟演讲稿
2014/08/26 职场文书
有限公司股东合作协议书
2014/10/29 职场文书
资料员岗位职责范本
2015/04/13 职场文书
聋哑人盗窃罪辩护词
2015/05/21 职场文书
pandas DataFrame.shift()函数的具体使用
2021/05/24 Python