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 相关文章推荐
根据鼠标的位置动态的控制层的位置
Nov 24 Javascript
用jquery实现的一个超级简单的下拉菜单
May 18 Javascript
javascript使用window.open提示“已经计划系统关机”的原因
Aug 15 Javascript
JavaScript获取网页表单action属性的方法
Apr 02 Javascript
AngularJS教程之环境设置
Aug 16 Javascript
微信小程序 navbar实例详解
May 11 Javascript
微信小程序使用toast消息对话框提示用户忘记输入用户名或密码功能【附源码下载】
Dec 09 Javascript
JS设计模式之策略模式概念与用法分析
Feb 05 Javascript
微信小程序判断用户是否需要再次授权获取个人信息
Jul 18 Javascript
为nuxt项目写一个面包屑cli工具实现自动生成页面与面包屑配置
Sep 29 Javascript
JS实现简易留言板特效
Dec 23 Javascript
js实现滑动滑块验证登录
Jul 24 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
PHP实现克鲁斯卡尔算法实例解析
2014/08/22 PHP
php socket通信(tcp/udp)实例分析
2016/02/14 PHP
laravel Validator ajax返回错误信息的方法
2019/09/29 PHP
用 JavaScript 迁移目录
2006/12/18 Javascript
JavaScript 基于原型的对象(创建、调用)
2009/10/16 Javascript
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
2013/03/24 Javascript
关于ExtJS4.1:快捷键支持的问题
2013/04/24 Javascript
js中function()使用方法
2013/12/24 Javascript
node.js入门教程迷你书、node.js入门web应用开发完全示例
2014/04/06 Javascript
浅谈JavaScript字符串拼接
2015/06/25 Javascript
jquery dialog获取焦点的方法
2017/02/09 Javascript
JavaScript中的工厂函数(推荐)
2017/03/08 Javascript
vue实现中部导航栏布局功能
2019/07/30 Javascript
es6中Promise 对象基本功能与用法实例分析
2020/02/23 Javascript
从0到1学习JavaScript编写贪吃蛇游戏
2020/07/28 Javascript
vue 组件基础知识总结
2021/01/26 Vue.js
python实现删除文件与目录的方法
2014/11/10 Python
Python函数可变参数定义及其参数传递方式实例详解
2015/05/25 Python
举例讲解Python设计模式编程中对抽象工厂模式的运用
2016/03/02 Python
Django内容增加富文本功能的实例
2017/10/17 Python
Python数据预处理之数据规范化(归一化)示例
2019/01/08 Python
python3 mmh3安装及使用方法
2019/10/09 Python
django在保存图像的同时压缩图像示例代码详解
2020/02/11 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
2020/02/21 Python
Python基于requests实现模拟上传文件
2020/04/21 Python
tensorflow使用freeze_graph.py将ckpt转为pb文件的方法
2020/04/22 Python
详解用selenium来下载小姐姐图片并保存
2021/01/26 Python
利用Python批量识别电子账单数据的方法
2021/02/08 Python
解决html5中的video标签ios系统中无法播放使用的问题
2020/08/10 HTML / CSS
古驰英国官网:GUCCI英国
2020/03/07 全球购物
初中生物教学反思
2014/01/10 职场文书
作文批改评语大全
2014/04/23 职场文书
门店店长岗位职责
2015/04/14 职场文书
初级职称评定工作总结
2015/08/13 职场文书
安全教育主题班会总结
2015/08/14 职场文书
丧事答谢词大全
2015/09/30 职场文书