file-loader打包图片文件时路径错误输出为[object-module]的解决方法


Posted in Javascript onJanuary 03, 2020

最近在学习使用webpack4.0自己搭建vue脚手架,在搭建过程中,踩了许多坑,使用file-loader打包图片文件时就遇到了以下的问题。

这是我的webpack 处理打包图片相关配置项:

...
module: {
 rules: [
 ...
 {
  test: /\.(jpe?g|png|gif|svg)$/i,
  use: [
  {
   loader: 'url-loader',
   options: {
   limit: 10000,
   name: '[name].[ext]',
   outputPath: 'imgs/'
   }
  }
  ]
 },
 ...
 ]
}
...

这个配置也是和目前网上教程差不多的。使用 url-loader 编译图片文件,输出到imgs文件夹下,乍一看也没什么问题,我相信你也是这么认为的。

但是webpack构建之后,会发现,页面上引用的图片都无法正常显示:

file-loader打包图片文件时路径错误输出为[object-module]的解决方法

图片引用错误

打开控制台,会发现所有图片的路径都变成了 [object module]

file-loader打包图片文件时路径错误输出为[object-module]的解决方法

object module

经过一番努力的探索,终于在stackoverflow上找到了 相应的问题

下方回答我翻译下:

默认情况下,file-loader生成使用ES模块语法的JS模块。在某些情况下,使用ES模块是有益的,比如在模块连接和树抖动的情况下。

file-loader打包图片文件时路径错误输出为[object-module]的解决方法

file-loader-options

简而言之就是file-loader新版本默认使用了esModule语法,造成了引用图片文件时的方式和以前的版本不一样,通过查看其仓库的release会发现:在v4.3.0版本就引入这一新特性。

file-loader打包图片文件时路径错误输出为[object-module]的解决方法

file-loader-versions

那如何解决这一问题呢?在刚才的stackoverflow问题回答里说明了有两种解决方法:

在引用图片时,加个 .default 后缀

<img src="require('assets/logo.png').default"/>

在webpack的file-loader配置项里,设置esModule为false

{
 test: /\.(jpe?g|png|gif|svg)$/i,
 use: [
 {
  loader: 'file-loader',
  options: {
  esModule: false
  }
 }
 ]
}

两种方法对比起来,显而易见,相信你已经知道了哪个方法更好用。于是我修改了webpack配置后,再编译,就没问题啦:wink:。

file-loader打包图片文件时路径错误输出为[object-module]的解决方法

build-success

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js实现addClass,removeClass,hasClass的函数代码
Jul 13 Javascript
JavaScript 命名空间 使用介绍
Aug 29 Javascript
JS实现随机乱撞彩色圆球特效的方法
May 05 Javascript
Javascript实现字数统计
Jul 03 Javascript
谈谈impress.js初步理解
Sep 09 Javascript
AngularJS使用angular-formly进行表单验证
Dec 27 Javascript
前端 Vue.js 和 MVVM 详细介绍
Dec 29 Javascript
浅谈Webpack自动化构建实践指南
Dec 18 Javascript
聊聊鉴权那些事(推荐)
Aug 22 Javascript
layui框架与SSM前后台交互的方法
Sep 12 Javascript
JavaScript设计模式之策略模式实现原理详解
May 29 Javascript
vue移动端的左右滑动事件详解
Jun 17 Javascript
uni-app如何实现增量更新功能
Jan 03 #Javascript
JS实现简单日历特效
Jan 03 #Javascript
微信小程序中的video视频实现 自定义播放按钮、封面图、视频封面上文案
Jan 02 #Javascript
微信小程序地图绘制线段并且测量(实例代码)
Jan 02 #Javascript
Element-UI+Vue模式使用总结
Jan 02 #Javascript
JS代码触发事件代码实例
Jan 02 #Javascript
微信小程序使用自定义组件导航实现当前页面高亮
Jan 02 #Javascript
You might like
IIS+PHP+MySQL+Zend配置 (视频教程)
2006/12/13 PHP
PHP 手机归属地查询 api
2010/02/08 PHP
自编函数解决pathinfo()函数处理中文问题
2014/11/03 PHP
PHP在弹框中获取foreach中遍历的id值并传递给地址栏
2017/06/13 PHP
Laravel5.5以下版本中如何自定义日志行为详解
2018/08/01 PHP
php+js实现裁剪任意形状图片
2018/10/31 PHP
jQuery获取css z-index在各种浏览器中的返回值
2010/09/15 Javascript
使用javascript做的一个随机点名程序
2014/02/13 Javascript
js写出遮罩层登陆框和对联广告并自动跟随滚动条滚动
2014/04/29 Javascript
基于jQuery实现搜索关键字自动匹配功能
2020/03/26 Javascript
老生常谈JQuery data方法的使用
2016/09/09 Javascript
解析NodeJs的调试方法
2016/12/11 NodeJs
从零学习node.js之利用express搭建简易论坛(七)
2017/02/25 Javascript
Vue中正确使用jQuery的方法
2017/10/30 jQuery
vue地址栏直接输入路由无效问题的解决
2018/11/15 Javascript
jQuery实现高级检索功能
2019/05/28 jQuery
vue实现权限控制路由(vue-router 动态添加路由)
2019/11/04 Javascript
微信小程序实现页面浮动导航
2020/01/08 Javascript
微信小程序实现树莓派(raspberry pi)小车控制
2020/02/12 Javascript
vue-router之解决addRoutes使用遇到的坑
2020/07/19 Javascript
[36:54]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[51:32]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
[49:56]VG vs Optic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python的地形三维可视化Matplotlib和gdal使用实例
2017/12/09 Python
Python简直是万能的,这5大主要用途你一定要知道!(推荐)
2019/04/03 Python
Python变量访问权限控制详解
2019/06/29 Python
Python对接支付宝支付自实现功能
2019/10/10 Python
最小二乘法及其python实现详解
2020/02/24 Python
Rockport乐步美国官网:风靡美国的白宫鞋
2016/11/24 全球购物
美国知名保健品网站:LuckyVitamin(支持中文)
2017/08/09 全球购物
Wojas罗马尼亚网站:波兰皮鞋品牌
2018/11/01 全球购物
负责人任命书范本
2014/06/04 职场文书
稽核岗位职责范本
2015/04/13 职场文书
CSS 还能这样玩?奇思妙想渐变的艺术
2021/04/27 HTML / CSS
mysql5.7的安装及Navicate长久免费使用的实现过程
2021/11/17 MySQL
mysql 子查询的使用
2022/04/28 MySQL