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