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 相关文章推荐
用jscript实现新建和保存一个word文档
Jun 15 Javascript
Div Select挡住的解决办法
Aug 07 Javascript
js 文件引入实现代码
Apr 23 Javascript
学习js在线html(富文本,所见即所得)编辑器
Dec 18 Javascript
Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)
Sep 17 Javascript
jquery判断复选框是否选中进行答题提示特效
Dec 10 Javascript
jquery使用Cookie和JSON记录用户最近浏览历史
Apr 19 Javascript
Vue入门之数量加减运算操作示例
Dec 11 Javascript
详解微信小程序中var、let、const用法与区别
Jan 11 Javascript
Vue.js中Line第三方登录api的实现代码
Jun 29 Javascript
解决vue自定义指令导致的内存泄漏问题
Aug 04 Javascript
js实现扫雷源代码
Nov 27 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
一个用于网络的工具函数库
2006/10/09 PHP
php面向对象全攻略 (十六) 对象的串行化
2009/09/30 PHP
PHP中几个可以提高运行效率的代码写法、技巧分享
2014/08/21 PHP
php的mssql数据库连接类实例
2014/11/28 PHP
PHP实现采集抓取淘宝网单个商品信息
2015/01/08 PHP
Laravel中批量赋值Mass-Assignment的真正含义详解
2017/09/29 PHP
jquery 图片缩放拖动的简单实例
2014/01/08 Javascript
innerText 使用示例
2014/01/23 Javascript
JQuery EasyUI 数字格式化处理示例
2014/05/05 Javascript
JavaScript函数获取事件源的小例子
2014/05/14 Javascript
javascript实现支持移动设备画廊
2015/08/24 Javascript
jQuery实现气球弹出框式的侧边导航菜单效果
2015/09/22 Javascript
jQuery删除节点用法示例(remove方法)
2016/09/08 Javascript
详解数组Array.sort()排序的方法
2020/05/09 Javascript
php main 与 iframe 相互通讯类(js+php同域/跨域)
2017/09/14 Javascript
AngularJS实现的锚点楼层跳转功能示例
2018/01/02 Javascript
浅谈Angular6的服务和依赖注入
2018/06/27 Javascript
es6数组includes()用法实例分析
2020/04/18 Javascript
[05:01]3.19DOTA2发布会 我们都是刀塔人
2014/03/25 DOTA
python找出完数的方法
2018/11/12 Python
python 从文件夹抽取图片另存的方法
2018/12/04 Python
PyQt打开保存对话框的方法和使用详解
2019/02/27 Python
python类共享变量操作
2020/09/03 Python
python Matplotlib数据可视化(1):简单入门
2020/09/30 Python
python安装第三方库如xlrd的方法
2020/10/31 Python
Python爬虫开发与项目实战
2020/12/16 Python
使用css实现android系统的loading加载动画
2019/07/25 HTML / CSS
欧洲著名的二手奢侈品网站:Vestiaire Collective
2020/03/07 全球购物
腾讯公司的一个sql题
2013/01/22 面试题
幼儿园托班开学寄语
2014/01/18 职场文书
《最可爱的人》教学反思
2014/02/14 职场文书
《风娃娃》教学反思
2014/04/19 职场文书
销售员试用期自我评价
2014/09/15 职场文书
2014年控辍保学工作总结
2014/12/08 职场文书
资产移交协议书
2016/03/24 职场文书
深入讲解数据库中Decimal类型的使用以及实现方法
2022/02/15 MySQL