只做拋磚引玉之效,不為指定報(bào)錯(cuò)之解
環(huán)境
pnpm使用工作區(qū)管理
其中一個(gè)項(xiàng)目跑不起來钉跷,報(bào)錯(cuò)
TypeError: Cannot read properties of undefined (reading 'tapAsync')
ExternalModuleFactoryPlugin.js:59 ExternalModuleFactoryPlugin.apply
[qiankun]/[webpack@5.75.0]/[webpack]/lib/ExternalModuleFactoryPlugin.js:59:39
報(bào)錯(cuò)原因:
webpack 中 normalModuleFactory.hooks.factorize.tapAsync 這句出問題
factorize是undefined造成調(diào)用失敗
找出問題過程
找到項(xiàng)目用到wepack的依賴包
可以執(zhí)行 pnpm ls --depth=1 分析依賴關(guān)系
發(fā)現(xiàn)弥鹦,我的 sass-loader peer 了 webpack@5.75.0
然后看 sass-loader 的 peerDependencies 是 "webpack": "^4.36.0 || ^5.0.0"
發(fā)現(xiàn)版本還是差挺遠(yuǎn)的
或者可以去根目錄node_modules看.pnpm里肚逸,webpack到底有幾個(gè)
我的就只有一個(gè)webpack@5.75.0
很有理由懷疑是這個(gè)問題
(可以測(cè)試用yarn安裝測(cè)試一下再啟動(dòng)爷辙,yarn會(huì)給我裝webapck@4.46.0,運(yùn)行也沒問題)
所以可以得出結(jié)論是webpack版本問題
最終解決
sass-loader由^8.0.2 固定為 8.0.0
原因是 8.0.0 的 peerDependencies 為 "webpack": "^4.36.0"
他會(huì)指定使用^4.36.0版本
換了8.0.0,.pnpm 下也會(huì) 多出一個(gè) webpack的版本
也就是原有的webpack@5.75.0 加上新增的 webpack@4.46.0