本文针对Webpack打包HTML文件时,img标签的src属性错误显示为[object Module]的问题进行分析。该问题通常由file-loader新版本默认启用esModule导致。通过配置file-loader的esModule选项为false,可恢复正常的图片路径输出,确保打包结果正确。
问题描述与复现
在HTML文件中引入img图片资源。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document1</title>
</head>
<body>
<div id="root" >
<img src="./logo.jpg" alt="">
</div>
</html>
配置与错误分析
尝试使用url-loader与file-loader配合html-loader进行打包处理。
{
test: /\.(png|jpg|gif|jpeg)$/,
use: [{
loader: 'url-loader',
loader: 'file-loader',
options: {
name: '[name].[ext]',
limit: 10240
}
}]
},
{
test: /\.(htm|html)$/,
loader: 'html-loader'
}
发现打包后的HTML文件中,img标签的src属性值变为[object Module]。

然而,如果使用"file-loader": "^4.2.0"或"file-loader": "^2.0.0"版本却可以正常打包。
解决方案
后来发现file-loader在新版本中esModule默认为true,因此手动设置为false。
{
test: /\.(png|jpg|gif|jpeg)$/,
use: [{
loader: 'url-loader',
// loader: 'file-loader',
options: {
esModule: false, // 这里设置为false
name: '[name].[ext]',
limit: 10240
}
}]
}

这样就可以正常打包了。

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