首先检查url-loader 小于10kb的图片会转换为base64格式
目标图片为3kb url-loader正常
{
test: /\.(?:png|jpe?g|gif|svg|woff|eot|ttf|otf)\??.*$/,
use: [
{
loader: 'url-loader',
options: {
limit: 10000,
name: 'img/[name]-[sha512:hash:base64:7].[ext]',
}
}
]
},
可能是因为图片已经被其他的 loader 处理过了,有两个处理 “.jsx” 文件的 loader,它们都使用了 “babel-loader”。Babel 可能会将你的图片导入转换为 ES6 模块。当 “url-loader” 接手处理图片时,它实际上处理的是一个模块对象,而不是图片文件。这就是为什么你的图片 URL 变成了 “[object Module]”。
{
test: /\.jsx?$/,
exclude: /node_modules/,
use: [
{
loader: 'babel-loader',
options: {
rootMode: 'upward'
}
}
]
},
解决这个问题,你可以尝试在 “url-loader” 的 “options” 中添加 “esModule: false”:
{
test: /\.(?:png|jpe?g|gif|svg|woff|eot|ttf|otf)\??.*$/,
use: [
{
loader: 'url-loader',
options: {
limit: 10000,
name: 'img/[name]-[sha512:hash:base64:7].[ext]',
esModule: false // 添加这一行
}
}
]
}
这将告诉 “url-loader” 不要将图片导入转换为 ES6 模块。
如果问题仍然存在,你可能需要检查你的其他配置或你的环境。例如,你可能需要确认你的图片路径是否正确,或者你可能需要确认你的 “node_modules” 是否包含了正确的 loader 版本。