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 相关文章推荐
URI、URL和URN之间的区别与联系
Dec 20 Javascript
区分JS中的undefined,null,"",0和false
Mar 08 Javascript
JS 自定义带默认值的函数
Jul 21 Javascript
jquery的父子兄弟节点查找示例代码
Mar 03 Javascript
node.js中的fs.createReadStream方法使用说明
Dec 17 Javascript
js实现同一页面多个不同运动效果的方法
Apr 10 Javascript
javascript判断网页是关闭还是刷新
Sep 12 Javascript
Vue input控件通过value绑定动态属性及修饰符的方法
May 03 Javascript
jQuery实现base64前台加密解密功能详解
Aug 29 jQuery
微信小程序swiper禁止用户手动滑动代码实例
Aug 23 Javascript
小程序实现锚点滑动效果
Sep 23 Javascript
React-vscode使用jsx语法的问题及解决方法
Jun 21 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
PHP4与PHP3中一个不兼容问题的解决方法
2006/10/09 PHP
php中var_export与var_dump的区别分析
2010/08/21 PHP
PHP持久连接mysql_pconnect()函数使用介绍
2012/02/05 PHP
php引用传值实例详解学习
2013/11/06 PHP
THINKPHP2.0到3.0有哪些改进之处
2015/01/04 PHP
php中JSON的使用方法
2015/04/30 PHP
phpcms中的评论样式修改方法
2016/10/21 PHP
Aster vs Newbee BO3 第三场2.18
2021/03/10 DOTA
javascript 触发事件列表 比较不错
2009/09/03 Javascript
javascript打印html内容功能的方法示例
2013/11/28 Javascript
jQuery表格排序组件-tablesorter使用示例
2014/05/26 Javascript
jquery实现类似淘宝星星评分功能实例
2014/09/12 Javascript
微信支付如何实现内置浏览器的H5页面支付
2015/09/25 Javascript
动态加载js文件简单示例
2016/04/21 Javascript
javascript 注释代码的几种方法总结
2017/01/04 Javascript
原生javascript上传图片带进度条【实例分享】
2017/04/06 Javascript
基于VUE选择上传图片并页面显示(图片可删除)
2017/05/25 Javascript
js随机生成一个验证码
2017/06/01 Javascript
浅谈Vue.js中如何实现自定义下拉菜单指令
2019/01/06 Javascript
关于vue项目中搜索节流的实现代码
2019/09/17 Javascript
[02:40]DOTA2殁境神蚀者 英雄基础教程
2013/11/26 DOTA
c++生成dll使用python调用dll的方法
2014/01/20 Python
一个小示例告诉你Python语言的优雅之处
2014/07/04 Python
Python DataFrame 设置输出不显示index(索引)值的方法
2018/06/07 Python
不知道这5种下划线的含义,你就不算真的会Python!
2018/10/09 Python
对Python中plt的画图函数详解
2018/11/07 Python
Python 运行.py文件和交互式运行代码的区别详解
2019/07/02 Python
Python 异常的捕获、异常的传递与主动抛出异常操作示例
2019/09/23 Python
给你一面国旗 教你用python画中国国旗
2019/09/24 Python
中国最大的名表商城:万表网
2016/08/29 全球购物
英国男女豪华配饰和礼品网站:Black.co.uk
2020/02/28 全球购物
人事部经理岗位职责
2014/03/07 职场文书
安全责任协议书
2014/04/21 职场文书
商业企业管理专业求职信
2014/07/10 职场文书
MySQL中in和exists区别详解
2021/06/03 MySQL
SQL Server使用T-SQL语句批处理
2022/05/20 SQL Server