pnpm安装依赖,webpack版本过高,api找不到问题

只做抛砖引玉之效,不为指定报错之解

环境

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容