3 回答

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超11個(gè)贊
根據(jù)文件加載器文檔:
默認(rèn)情況下,file-loader 生成使用 ES 模塊語法的 JS 模塊。在某些情況下,使用 ES 模塊是有益的,例如在模塊連接和搖樹的情況下。
似乎 webpack 將 ES 模塊require()調(diào)用解析為如下所示的對象:{default: module},而不是扁平化模塊本身。這種行為有些爭議,本期對此進(jìn)行了討論。
因此,要讓您的src屬性正確解析,您需要能夠訪問default導(dǎo)出模塊的屬性。如果您使用的是框架,您應(yīng)該能夠執(zhí)行以下操作:
<img src={require('assets/logo.png').default}/> <!-- React -->
<!-- OR -->
<img src="require('assets/logo.png').default"/> <!-- Vue -->
或者,您可以啟用文件加載器的 CommonJS 模塊語法,webpack 將直接解析為模塊本身。esModule:false在你的 webpack 配置中設(shè)置。
webpack.config.js:
{
test: /\.(png|jpe?g|gif)$/i,
use: [
{
loader: 'file-loader',
options: {
esModule: false,
},
},
],
},

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超14個(gè)贊
esModule: false
在您的file-loader
配置中建議的修復(fù)是當(dāng)前最好的解決方法。
然而,這實(shí)際上是一個(gè)在html-loader
這里被跟蹤的錯(cuò)誤:https ://github.com/webpack-contrib/html-loader/issues/203
看起來 ES Module 支持已添加到file-loader
、css-loader
和其他朋友,但html-loader
錯(cuò)過了。
修復(fù)此錯(cuò)誤后,最好刪除esModule: false
并簡單地升級html-loader
,因?yàn)?ES 模塊提供了一些小好處(如文檔中所述)
或者,如果(像我一樣),您發(fā)現(xiàn)這個(gè)問題是因?yàn)槟鸁o法從 CSS(而不是從 HTML)加載圖像,那么修復(fù)只是升級css-loader
,無需禁用 ES 模塊。

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個(gè)贊
剛剛將我的文件加載器更新為 ^5.0.2 分鐘前。
我知道esModule: false
是建議的修復(fù),但這對我不起作用。
我的解決方法<img src={require('assets/logo.png').default}/>
很奇怪。第一次使用.default
,但它工作。
添加回答
舉報(bào)