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 相关文章推荐
把Node.js程序加入服务实现随机启动
Jun 25 Javascript
jquery制做精致的倒计时特效
Jun 13 Javascript
jQuery validate插件功能与用法详解
Dec 15 Javascript
使用jquery给新生的th绑定hover事件的实例
Feb 10 Javascript
AugularJS从入门到实践(必看篇)
Jul 10 Javascript
BootStrap入门学习第一篇
Aug 28 Javascript
关于Promise 异步编程的实例讲解
Sep 01 Javascript
JavaScript屏蔽Backspace键的实现代码
Nov 02 Javascript
Vue实现点击时间获取时间段查询功能
Aug 21 Javascript
security.js实现的RSA加密功能示例
Jun 06 Javascript
通过webpack引入第三方库的方法
Jul 20 Javascript
Vue 权限控制的两种方法(路由验证)
Aug 16 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
虫族 Zerg 热键控制
2020/03/14 星际争霸
PHP对表单提交特殊字符的过滤和处理方法汇总
2014/02/18 PHP
支持中文的PHP按字符串长度分割成数组代码
2015/05/17 PHP
php实现curl模拟ftp上传的方法
2015/07/29 PHP
PHP数组函数array_multisort()用法实例分析
2016/04/02 PHP
动态为事件添加js代码示例
2009/02/15 Javascript
web开发人员学习jQuery的6大理由及jQuery的优势介绍
2013/01/03 Javascript
javascript获取隐藏dom的宽高 具体实现
2013/07/14 Javascript
JavaScript测试工具之Karma-Jasmine的安装和使用详解
2015/12/03 Javascript
JavaScript代码因逗号不规范导致IE不兼容的问题
2016/02/25 Javascript
原生ajax处理json格式数据的实例代码
2016/12/25 Javascript
bootstrap中日历范围选择插件daterangepicker的使用详解
2018/04/17 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
微信小程序人脸识别功能代码实例
2019/05/07 Javascript
微信小程序云开发获取文件夹下所有文件(推荐)
2019/11/14 Javascript
微信小程序实现上传照片代码实例解析
2020/08/04 Javascript
vue 实现图片懒加载功能
2020/12/31 Vue.js
[48:52]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第一局
2016/02/25 DOTA
python解决方案:WindowsError: [Error 2]
2016/08/28 Python
django静态文件加载的方法
2018/05/20 Python
django框架自定义用户表操作示例
2018/08/07 Python
tensorflow对图像进行拼接的例子
2020/02/05 Python
Python表达式的优先级详解
2020/02/18 Python
Python argparse模块使用方法解析
2020/02/20 Python
Python如何截图保存的三种方法(小结)
2020/09/01 Python
利用CSS3实现炫酷的飞机起飞动画
2016/09/17 HTML / CSS
浅谈CSS3 动画卡顿解决方案
2019/01/02 HTML / CSS
加拿大国民体育购物网站:National Sports
2018/11/04 全球购物
C语言笔试题
2014/09/04 面试题
高中毕业生自我鉴定范文
2013/09/26 职场文书
贷款委托书范本
2014/04/08 职场文书
团日活动总结书格式
2014/05/08 职场文书
跳蚤市场口号
2014/06/13 职场文书
励志演讲稿600字
2014/08/21 职场文书
学习十八大的感悟
2015/08/11 职场文书
apache虚拟主机配置的三种方式(小结)
2022/07/23 Servers