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 相关文章推荐
基于jQuery的简单九宫格实现代码
Aug 09 Javascript
js操作label给label赋值及取label的值示例
Nov 07 Javascript
jQuery中$.each使用详解
Jan 29 Javascript
jQuery 监控键盘一段时间没输入
Apr 22 Javascript
js判断主流浏览器类型和版本号的简单实现代码
May 26 Javascript
Bootstrap Validator 表单验证
Jul 25 Javascript
Angualrjs和bootstrap相结合实现数据表格table
Mar 30 Javascript
Node.js+jade抓取博客所有文章生成静态html文件的实例
Sep 19 Javascript
详解Vue项目在其他电脑npm run dev运行报错的解决方法
Oct 29 Javascript
Vue 页面权限控制和登陆验证功能的实例代码
Jun 20 Javascript
微信小程序嵌入腾讯视频源过程详解
Aug 08 Javascript
解决vue2中使用elementUi打包报错的问题
Sep 22 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
深入了解 register_globals (附register_globals=off 网站打不开的解决方法)
2012/06/27 PHP
基于empty函数的判断详解
2013/06/17 PHP
php用正则表达式匹配URL的简单方法
2013/11/12 PHP
php及codeigniter使用session-cookie的方法(详解)
2017/04/06 PHP
PHP开发API接口签名生成及验证操作示例
2020/05/27 PHP
js获取本机的外网/广域网ip地址完整源码
2013/08/12 Javascript
JS正则验证邮箱的格式详细介绍
2013/11/19 Javascript
JavaScript 开发工具webstrom使用指南
2014/12/09 Javascript
JavaScript获取浏览器信息的方法
2015/11/20 Javascript
关于cookie的初识和运用(js和jq)
2016/04/07 Javascript
ES6正则表达式的一些新功能总结
2017/05/09 Javascript
单行 JS 实现移动端金钱格式的输入规则
2017/05/22 Javascript
最全的JavaScript开发工具列表 总有一款适合你
2017/06/29 Javascript
Vue2.0用户权限控制解决方案
2017/11/29 Javascript
vue采用EventBus实现跨组件通信及注意事项小结
2018/06/14 Javascript
vue-router路由懒加载的实现(解决vue项目首次加载慢)
2018/08/28 Javascript
npm scripts 使用指南详解
2018/10/08 Javascript
validform表单验证的实现方法
2019/03/08 Javascript
vue-next/runtime-core 源码阅读指南详解
2019/10/25 Javascript
vue中beforeRouteLeave实现页面回退不刷新的示例代码
2019/11/01 Javascript
JS对日期操作封装代码实例
2019/11/08 Javascript
vue 微信扫码登录(自定义样式)
2020/01/06 Javascript
python切换hosts文件代码示例
2013/12/31 Python
python使用ctypes模块调用windowsapi获取系统版本示例
2014/04/17 Python
Python+appium框架原生代码实现App自动化测试详解
2020/03/06 Python
Django 多对多字段的更新和插入数据实例
2020/03/31 Python
使用Python webdriver图书馆抢座自动预约的正确方法
2021/03/04 Python
谈谈对css属性box-sizing的了解
2017/01/04 HTML / CSS
现代化办公人员工作的自我评价
2013/10/16 职场文书
博士毕业生自我鉴定范文
2014/04/13 职场文书
关工委先进个人事迹材料
2014/05/23 职场文书
永远跟党走演讲稿
2014/09/12 职场文书
iPhone13再次曝光
2021/04/15 数码科技
logback如何自定义日志存储
2021/08/30 Java/Android
Python+OpenCV实现图片中的圆形检测
2022/04/07 Python
Docker安装MySql8并远程访问的实现
2022/07/07 Servers