组件中的原始代码:
打包后出现:
解决方案:在配置 file-loader 的时候,设置 options 中的 esModule:false 就可以了。示例代码如下:
{
test: /\.(png|jpe?g|gif)$/i,
// use: 'file-loader',
use: [
{
loader: 'file-loader',
options: {
// name: './[name].[ext]',
esModule: false
}
}
]
}
原理解析:因为url-loader默认导出esm,而@vue/component-compiler-utils按照commonjs解析。打包后,可以查找bundle.js中关于这个图片的模块,会发现它被包裹在一个模块中,这个模块导出的是module.exports=“export default xxxxxx” ,所以最后会是一个对象。
注意:1. 路径问题:要改成一个相对路径的形式,把 ./ 去掉,那么它的意思就是一个纯的字符串,同时要考虑这个网站根目录的相对路径,而不是开发中的相对目录。
2. 在url-loader中用的就是file-loader,所以在这两个loader中更改都可以。