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使用ajax从xml文件动态获取数据显示的方法
Mar 24 Javascript
js实现发送验证码后的倒计时功能
May 28 Javascript
EXT中单击button按钮grid添加一行(光标位置可设置)的实例代码
Jun 02 Javascript
angular.fromJson与toJson方法用法示例
May 17 Javascript
JavaScript闭包_动力节点Java学院整理
Jun 27 Javascript
vue实现全选和反选功能
Aug 31 Javascript
vue 使用ref 让父组件调用子组件的方法
Feb 08 Javascript
微信小程序登录对接Django后端实现JWT方式验证登录详解
Jul 29 Javascript
微信小程序通过一个json实现分享朋友圈图片
Sep 03 Javascript
p5.js绘制旋转的正方形
Oct 23 Javascript
Nuxt 项目性能优化调研分析
Nov 07 Javascript
vue-treeselect的基本用法以及解决点击无法出现拉下菜单
Apr 30 Vue.js
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执行速度全攻略(上)
2006/10/09 PHP
php5 and xml示例
2006/11/22 PHP
利用PHP+JS实现搜索自动提示(实例)
2013/06/09 PHP
ThinkPHP中数据操作案例分析
2015/09/27 PHP
常用PHP数组排序函数归纳
2016/08/08 PHP
php mysql数据库操作类(实例讲解)
2017/08/06 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
JS getStyle获取最终样式函数代码
2010/04/01 Javascript
JS判定是否原生方法
2013/07/22 Javascript
查找页面中所有类为test的结点的方法
2014/03/28 Javascript
原生javascript实现图片滚动、延时加载功能
2015/01/12 Javascript
jQuery oLoader实现的加载图片和页面效果
2015/03/14 Javascript
jQuery插件kinMaxShow扩展效果用法实例
2015/05/04 Javascript
Node.js 条形码识别程序构建思路详解
2016/02/14 Javascript
Javascript之BOM(window对象)详解
2016/05/25 Javascript
AngularJS基础 ng-focus 指令简单示例
2016/08/01 Javascript
Angular.JS内置服务$http对数据库的增删改使用教程
2017/05/07 Javascript
JavaScript函数apply()和call()用法与异同分析
2018/08/10 Javascript
在angularJs中进行数据遍历的2种方法
2018/10/08 Javascript
ECharts地图绘制和钻取简易接口详解
2019/07/12 Javascript
如何解决vue在ios微信"复制链接"功能问题
2020/03/26 Javascript
python回调函数用法实例分析
2015/05/09 Python
python字符串的常用操作方法小结
2016/05/21 Python
在Pycharm中自动添加时间日期作者等信息的方法
2019/01/16 Python
python多进程读图提取特征存npy
2019/05/21 Python
python opencv minAreaRect 生成最小外接矩形的方法
2019/07/01 Python
Python Selenium XPath根据文本内容查找元素的方法
2020/12/07 Python
详解利用canvas实现环形进度条的方法
2019/06/12 HTML / CSS
HTML5 LocalStorage 本地存储详细概括(多图)
2017/08/18 HTML / CSS
利用Node实现HTML5离线存储的方法
2020/10/16 HTML / CSS
车间组长岗位职责
2013/12/20 职场文书
贯彻学习两会心得体会范文
2014/03/17 职场文书
技能比武方案
2014/05/21 职场文书
万能检讨书2000字
2014/10/17 职场文书
情人节活动总结范文
2015/02/05 职场文书
滴水洞导游词
2015/02/10 职场文书