只做抛砖引玉之效,不为指定报错之解
环境
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