如何禁用NPM中等效依赖自动安装?解决NX Monorepo重复安装问题
解决NPM7在NX Monorepo中重复安装Angular的问题
问题原因
NPM7默认会自动安装对等依赖,当子应用my-app中安装的库所声明的Angular对等依赖版本,和根目录package.json里的Angular版本不完全匹配,或者NPM的自动hoisting逻辑未触发时,就会在子应用的node_modules里单独安装一份Angular。
解决步骤
统一Angular版本
检查根目录package.json和apps/my-app/package.json中所有@angular/*相关包的版本号,确保完全一致(包括主版本、次版本、补丁号,比如都为16.2.3,不能一个写16.x.x一个写16.2.3)。版本不一致是NPM单独安装的核心原因。配置NPM强制Hoisting
有两种方式确保NPM把依赖都提升到根目录:- 在根目录
package.json中添加安装配置:"installConfig": { "hoist": true, "hoistPattern": ["@angular/*"] } - 在根目录创建
.npmrc文件,写入:
这个配置会强制NPM把所有hoist=true hoist-pattern[]=@angular/*@angular相关包都提升到根目录的node_modules中。
- 在根目录
清理并重新安装依赖
先清理现有依赖和锁文件,避免缓存影响:# 删除所有node_modules rm -rf node_modules apps/my-app/node_modules # 删除锁文件 rm package-lock.json apps/my-app/package-lock.json # 重新安装 npm installWindows用户可以用对应的命令:
rmdir /s /q node_modules apps\my-app\node_modules del package-lock.json apps\my-app\package-lock.json npm install使用NX官方命令管理依赖
不要直接在子应用目录执行npm install,改用NX的nx add命令添加第三方库:nx add <你的库名称> --project=my-appNX会自动处理Monorepo的依赖共享,确保根目录统一管理依赖,避免重复安装。
内容的提问来源于stack exchange,提问作者coltrane
相关产品推荐
相关产品推荐

