You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何禁用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把依赖都提升到根目录:

    1. 在根目录package.json中添加安装配置:
      "installConfig": {
        "hoist": true,
        "hoistPattern": ["@angular/*"]
      }
      
    2. 在根目录创建.npmrc文件,写入:
      hoist=true
      hoist-pattern[]=@angular/*
      
      这个配置会强制NPM把所有@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 install
    

    Windows用户可以用对应的命令:

    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-app
    

    NX会自动处理Monorepo的依赖共享,确保根目录统一管理依赖,避免重复安装。

内容的提问来源于stack exchange,提问作者coltrane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 02:30:40