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实现简单的顶部定时关闭层效果
Jun 15 Javascript
JS实现的通用表单验证插件完整实例
Aug 20 Javascript
基于JavaScript实现在新的tab页打开url
Aug 04 Javascript
Bootstrap table简单使用总结
Feb 15 Javascript
Javascript循环删除数组中元素的几种方法示例
May 18 Javascript
vue2 自定义动态组件所遇到的问题
Jun 08 Javascript
vue使用axios时关于this的指向问题详解
Dec 22 Javascript
vue计算属性和监听器实例解析
May 10 Javascript
CKEditor4配置与开发详细中文说明文档
Oct 08 Javascript
2019年度web前端面试题总结(主要为Vue面试题)
Jan 12 Javascript
JS实现鼠标按下拖拽效果
Jul 23 Javascript
解决vue自定义组件@click点击失效问题
Apr 30 Vue.js
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
php利用新浪接口查询ip获取地理位置示例
2014/01/20 PHP
PHP+MYSQL中文乱码问题
2015/07/01 PHP
PHP中常用的数组操作方法笔记整理
2016/05/16 PHP
遍历echsop的region表形成缓存的程序实例代码
2016/11/01 PHP
php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
2016/12/10 PHP
laravel 解决crontab不执行的问题
2019/10/22 PHP
JQuery循环滚动图片代码
2011/12/08 Javascript
学习JavaScript编程语言的8张思维导图分享
2015/03/27 Javascript
JavaScript学习笔记之DOM基础 2.4
2015/08/14 Javascript
举例讲解JavaScript中关于对象操作的相关知识
2015/11/16 Javascript
js实现跨域访问的三种方法
2015/12/09 Javascript
Bootstrap框架实现广告轮播效果
2016/11/28 Javascript
Vue兼容ie9的问题全面解决方案
2018/06/19 Javascript
手把手带你封装一个vue component第三方库
2019/02/14 Javascript
JS浅拷贝和深拷贝原理与实现方法分析
2019/02/28 Javascript
小程序server请求微信服务器超时的解决方法
2019/05/21 Javascript
TypeScript中使用getElementXXX()的示例代码
2019/09/12 Javascript
Vue 使用iframe引用html页面实现vue和html页面方法的调用操作
2020/11/16 Javascript
[54:43]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第一场 2月22日
2021/03/11 DOTA
python通过post提交数据的方法
2015/05/06 Python
python 字符串只保留汉字的方法
2018/11/16 Python
Python功能点实现:函数级/代码块级计时器
2019/01/02 Python
Python+pyplot绘制带文本标注的柱状图方法
2019/07/08 Python
Python自定义sorted排序实现方法详解
2020/09/18 Python
python如何利用paramiko执行服务器命令
2020/11/07 Python
CSS3 text shadow字体阴影效果
2016/01/08 HTML / CSS
关于h5中的fetch方法解读(小结)
2017/11/15 HTML / CSS
澳大利亚冒险体验:Adrenaline(跳伞、V8赛车、热气球等)
2017/09/18 全球购物
澳大利亚排名第一的儿童在线玩具商店:Toy Galaxy
2018/10/06 全球购物
Kusmi茶美国官网:优质散叶茶和茶包
2019/10/13 全球购物
酒店应聘自荐信
2013/11/09 职场文书
前台接待员岗位职责
2014/01/02 职场文书
亲属关系公证书
2014/04/08 职场文书
人力资源管理毕业求职信
2014/08/05 职场文书
结婚保证书
2015/01/16 职场文书
Python干货实战之八音符酱小游戏全过程详解
2021/10/24 Python