Rush logo

Rush

由微软开源的企业级可扩展 Monorepo 管理器,专为大规模 Web 项目的构建编排、依赖治理与发布管理而设计。

Monorepo企业级Microsoft依赖治理

Rush 是微软 SharePoint 团队开发的企业级 Monorepo 编排工具,专为数百个应用和服务的超大规模仓库设计。通过精确的依赖锁定消除"幽灵依赖",在依赖治理和发布管理方面具备同类工具难以匹敌的严谨性。

Rush

由微软开源的企业级可扩展 Monorepo 管理器,专为大规模 Web 项目的构建编排、依赖治理与发布管理而设计。

技术简介说明

Rush 是由微软 SharePoint 团队工程师开发并维护的开源 Monorepo 构建编排工具,诞生于管理数百个应用和服务的超大规模生产仓库的实际需求中。它的核心定位是作为 Monorepo 的"统一协调器"——一次性处理安装、链接、编译、Changelog 生成、版本发布等全链路工作流,让每个子项目文件夹保持完全自治、可独立迁移。

Rush 的架构设计深度依赖于底层包管理器(pnpm / npm / yarn),通过精确的依赖锁定和符号链接机制,从根本上消除"幽灵依赖"(phantom dependencies)和"包管理器副本"(NPM doppelgangers)问题,确保配置和构建的完全可预测性。这一设计理念使 Rush 在依赖治理和发布管理方面具备同类工具难以匹敌的严谨性。

作为 Rush Stack 生态的核心组件,Rush 已被 Azure SDK、HBO Max、OneDrive、SharePoint、Wix、TikTok 等大型组织广泛采用,是目前唯一一款专为超大规模 JavaScript/TypeScript Monorepo(数百个项目、数千名开发者)从头设计的开源工具。

基本信息

属性详情
官网https://rushjs.io
GitHubhttps://github.com/microsoft/rushstack
LicenseMIT
最新版本@microsoft/rush v5.177.1(2026 年 6 月 20 日发布)
主要维护者/公司Microsoft / Rush Stack 社区
npm 包名@microsoft/rush
GitHub Stars~6,500+
支持语言JavaScript / TypeScript
Node.js 要求LTS 版本(当前支持 Node.js 18+)

快速上手

安装

Rush 推荐通过全局安装的方式使用,并提供 install-run.js 机制确保团队使用一致版本:

# 全局安装 Rush(仅用于初始化)
npm install -g @microsoft/rush
 
# 验证安装
rush --help

团队一致性安装模式:

Rush 会在仓库中生成 common/config/rush/ 目录,并通过 rushVersion 字段锁定版本。团队成员只需运行:

# 安装依赖(Rush 会自动使用指定版本)
rush install
# 或等价的
rush update

Rush 会根据 rush.json 中声明的版本自动下载并使用正确的 Rush 版本,无需每个开发者手动对齐全局版本。

基础配置

1. 初始化仓库:

rush init

该命令生成 rush.json,这是 Rush 的核心配置文件:

{
  "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/rush.schema.json",
  "rushVersion": "5.177.1",
  "pnpmVersion": "9.15.5",
  "nodeSupportedVersionRange": ">=18.0.0",
  "packageManager": "pnpm",
  "projects": [
    {
      "packageName": "@my-org/app-web",
      "projectFolder": "apps/web",
      "shouldPublish": false
    },
    {
      "packageName": "@my-org/ui-library",
      "projectFolder": "libraries/ui",
      "shouldPublish": true
    }
  ]
}

2. 项目级配置(每个子项目):

在子项目中创建 config/rush-project.json

{
  "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/rush-project.schema.json",
  "operationSettings": [
    {
      "operationName": "build",
      "outputFolderNames": ["dist", "lib"]
    }
  ]
}

3. 核心配置文件一览:

配置文件位置用途
rush.json仓库根目录全局配置:包管理器、版本、项目列表
rush-project.json各子项目项目级构建配置、缓存规则
pnpm-workspace.yamlcommon/config/rush/pnpm workspace 配置
common-versions.jsoncommon/config/rush/全局依赖版本约束
build-cache.jsoncommon/config/rush/构建缓存配置
rush-alerts.jsoncommon/config/rush/仓库级告警通知(实验性)

最小示例

目录结构:

my-monorepo/
├── apps/
│   └── web/
│       ├── package.json
│       └── src/index.ts
├── libraries/
│   └── utils/
│       ├── package.json
│       └── src/index.ts
├── common/
│   └── config/
│       └── rush/
├── rush.json
└── pnpm-lock.yaml

常用命令:

# 安装所有项目依赖(一次性)
rush install
 
# 构建所有项目(并行)
rush build
 
# 仅构建某个项目及其依赖
rush build --to @my-org/app-web
 
# 仅构建受某项目影响的下游项目
rush build --from @my-org/ui-library
 
# 在所有项目中执行命令
rushx test
 
# 记录变更并生成 changelog
rush change
 
# 发布所有有变更的包
rush publish
 
# 批量升级版本号
rush version --bump

核心概念与架构

核心概念

  1. 统一安装(Unified Installation)
    Rush 将所有项目的依赖统一安装到 common/ 目录中,然后通过符号链接为每个项目重建正确的 node_modules。这确保了整个仓库的依赖一致性。

  2. 依赖图编排(Dependency Graph Orchestration)
    Rush 自动分析项目间的依赖关系,构建有向无环图(DAG),并以此为依据进行并行构建调度。非依赖项目并行执行,依赖项目按拓扑排序串行。

  3. 变更追踪(Change Tracking)
    通过 rush change 命令,开发者在提交 PR 时记录每个变更的性质(major / minor / patch)和描述。这些变更记录用于自动生成 Changelog 和指导版本发布。

  4. 版本策略(Version Policies)
    支持锁定版本策略(locked version)和独立版本策略(individual version),可以控制哪些包同步发布、哪些独立发布。

  5. 幽灵依赖防护(Phantom Dependency Prevention)
    当使用 pnpm 作为包管理器时,Rush 利用 pnpm 的严格依赖解析模式,从根本上杜绝幽灵依赖问题——项目只能访问其 package.json 中显式声明的依赖。

  6. 构建缓存(Build Caching)
    支持本地缓存和远程缓存(Azure Blob Storage / AWS S3),当项目源码和依赖未发生变化时直接复用缓存产物,大幅加速 CI/CD 流程。

架构设计

┌─────────────────────────────────────────────────┐
│                  rush.json                      │
│            (全局配置 & 项目注册)                  │
└──────────────────────┬──────────────────────────┘
                       │
         ┌─────────────┼─────────────┐
         ▼             ▼             ▼
   ┌──────────┐  ┌──────────┐  ┌──────────┐
   │  App A   │  │  Lib B   │  │  Tool C  │
   │ (project)│  │ (project)│  │ (project)│
   └─────┬────┘  └─────┬────┘  └─────┬────┘
         │             │             │
         ▼             ▼             ▼
   ┌──────────────────────────────────────┐
   │         Dependency Graph             │
   │    (拓扑排序 & 并行调度引擎)          │
   └──────────────────┬───────────────────┘
                      │
         ┌────────────┼────────────┐
         ▼            ▼            ▼
   ┌──────────┐ ┌──────────┐ ┌──────────┐
   │ 本地缓存  │ │ 远程缓存  │ │ 构建输出  │
   └──────────┘ └──────────┘ └──────────┘

Rush 的每个子项目保持完全自治——拥有独立的 package.json、构建脚本和测试命令。Rush 不要求项目使用特定的构建工具或框架,只负责编排和协调。

核心特性

  • 多种构建模式
    支持并行构建、增量构建、子集构建(--to / --from)和分布式构建(Cobuilds),灵活适配不同规模的开发需求。

  • 自动化发布管理
    内置 rush changerush publishrush version 命令,实现从变更追踪到版本发布的全自动化流程,支持独立版本和统一版本策略。

  • 严格的依赖治理
    通过 preferredVersionsallowedAlternativeVersionsrush review 等机制,确保整个仓库依赖版本的一致性,防止依赖冲突。

  • 构建缓存系统
    支持本地文件缓存和远程云存储缓存(Azure Blob / AWS S3),通过内容哈希实现精确的缓存命中,避免重复构建。

  • 多包管理器支持
    原生支持 pnpm、npm 和 yarn 三种包管理器,通过配置即可切换,无需修改项目代码。推荐使用 pnpm 以获得最佳依赖隔离效果。

  • Rush MCP Server(AI 集成)
    2025–2026 年新增的重要特性,提供 Model Context Protocol 服务器,让 AI 编码助手(Cursor、GitHub Copilot、Claude Code 等)能够理解 Monorepo 的项目结构、依赖关系和构建图。

  • Lockfile Explorer
    配套的可视化调试工具,用于排查 pnpm lockfile 中的版本冲突和依赖解析问题,降低大型仓库的维护复杂度。

  • Rig 系统
    通过 "rig packages" 实现跨项目的工具配置共享——ESLint、TypeScript、Jest 等配置可以集中维护在一个包中,其他项目通过引用自动继承。

  • 策略执行与审批
    支持对新依赖包引入的审批流程,防止不受控的依赖增长,确保安全和合规性。

  • 实验性告警系统
    通过 rush alert 命令和 rush-alerts.json 配置,仓库维护者可以向所有开发者推送重要通知(如版本迁移提醒、安全告警等)。

生态图

Rush Stack 生态全景

Rush Stack (github.com/microsoft/rushstack)
│
├── 核心工具
│   ├── Rush                    # Monorepo 构建编排器
│   ├── Heft                    # 可扩展构建框架(与 Rush 深度集成)
│   └── Lockfile Explorer       # 依赖锁文件可视化分析工具
│
├── API 工具链
│   ├── API Extractor           # TypeScript API 报告生成 & 声明文件打包
│   └── API Documenter          # 基于 TSDoc 的文档站点生成器
│
├── 代码质量
│   ├── ESLint Bulk Utilities   # 大规模 ESLint 规则部署工具
│   ├── ESLint Configuration    # 标准化 ESLint 配置包
│   └── Packlets                # 项目内部文件组织的轻量级模块边界
│
├── 基础设施
│   ├── Rush SDK                # 与 Rush 引擎交互的编程 API
│   ├── Rush MCP Server         # AI 编码助手集成(Model Context Protocol)
│   ├── Rundown                 # Node.js 进程启动优化器
│   └── Trace Import            # 模块导入追踪 & 调试工具
│
└── 共享库
    ├── TSCommand               # 严格命令行解析器(含 Shell 自动补全)
    ├── Operation Graph         # 增量构建引擎
    ├── Rig Package             # 工具配置分发机制
    └── Stream Collator         # 并行任务日志防交错输出

关键依赖

依赖用途
pnpm / npm / yarn底层包管理器(推荐 pnpm)
Node.js LTS运行时环境
TypeScript主要开发语言(非强制但生态紧密集成)

社区生态

  • Rush Stack 社区rushstack.io
  • GitHub Discussions:在 microsoft/rushstack 仓库中活跃讨论
  • TikTok 工程博客:Cobuilds 分布式构建、Rush MCP Server 等贡献
  • Stack Overflowrushjs 标签下有社区问答

适用场景

  • 超大型前端 Monorepo(100+ 项目)
    Rush 是少数专为百项目以上规模设计的工具。Azure SDK、SharePoint 等拥有数百个包的仓库验证了其在极端规模下的可靠性。

  • 多包 NPM 发布管理
    当团队需要从一个仓库发布大量 NPM 包(如组件库、工具库、SDK),Rush 内置的变更追踪、Changelog 生成和批量发布功能是不可替代的核心能力。

  • 需要严格依赖治理的企业项目
    金融、医疗等对安全性和合规性要求高的场景,Rush 的依赖审批、版本锁定和幽灵依赖防护提供了企业级的治理能力。

  • 跨团队协作的大型前端平台
    多个团队共享组件库和基础设施时,Rush 的版本策略、Rig 系统和审批流程确保协作有序。

  • 需要 AI 辅助开发的 Monorepo
    Rush MCP Server 让 AI 编码助手能够理解仓库结构,在超大型代码库中实现精准的上下文感知和代码生成。

  • 长期维护的基础设施项目
    如设计系统、UI 组件库、CLI 工具集等需要长期迭代和多版本维护的项目,Rush 的发布管理和版本策略提供稳定的工程保障。

  • 需要多云构建缓存的 CI/CD 场景
    Rush 原生支持 Azure Blob Storage 和 AWS S3 作为远程缓存后端,在大规模 CI 环境中显著减少构建时间。

开发与工程化

开发流程

# 1. 开发者本地开发
rush install           # 安装所有依赖
rush build             # 构建所有项目
rushx dev              # 启动单个项目的开发模式
 
# 2. 提交变更前记录
rush change            # 选择受影响的包,记录变更描述和版本类型
 
# 3. CI 中验证
rush check             # 检查依赖版本一致性
rush build             # 全量构建(利用缓存)
rush test              # 运行所有测试
 
# 4. 发布
rush publish           # 发布所有应发布的包
rush generate-documentation  # 更新文档

CI/CD 集成

Azure DevOps 示例:

# azure-pipelines.yml
trigger:
  - main
 
pool:
  vmImage: 'ubuntu-latest'
 
steps:
  - task: NodeTool@0
    inputs:
      versionSpec: '20.x'
 
  - script: npm install -g @microsoft/rush
    displayName: 'Install Rush'
 
  - script: rush install
    displayName: 'Install Dependencies'
 
  - script: rush build --verbose
    displayName: 'Build All Projects'
 
  - script: rush test
    displayName: 'Run Tests'
 
  - script: rush publish --apply --target-branch main
    displayName: 'Publish Packages'
    condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))

GitHub Actions 示例:

# .github/workflows/ci.yml
name: CI
on: [push, pull_request]
 
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0  # Rush 需要完整 Git 历史
 
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
 
      - run: npm install -g @microsoft/rush
      - run: rush install
      - run: rush build --verbose
      - run: rush test

构建缓存配置

// common/config/rush/build-cache.json
{
  "buildCacheEnabled": true,
  "cacheProvider": "azure-blob-storage",
  "azureBlobStorageConfiguration": {
    "storageAccountName": "my-build-cache",
    "storageContainerName": "rush-cache",
    "isCacheWriteAllowed": true
  }
}

工程化最佳实践

  • 使用 rush-pnpm 命令在 Rush 环境中执行原生 pnpm 命令
  • 通过 common/config/rush/.npmrc 统一配置 registry 和认证
  • 使用 rush-deploy.json 定义部署产物筛选规则
  • 利用 rush build --impure 标记不缓存的构建任务

性能与安全

性能特点

  • 并行构建:基于依赖图的并行调度,非依赖项目同时构建
  • 增量构建:通过文件哈希检测变更,仅重建受影响的项目
  • 远程缓存:跨机器共享构建产物,CI 环境中可节省 60-90% 构建时间
  • Cobuilds(实验性):TikTok 贡献的分布式构建能力,多台机器协同构建同一任务
  • pnpm 内容寻址存储:利用 pnpm 的全局存储避免重复下载,安装速度极快

性能优化建议

  • 启用远程缓存(build-cache.json),在 CI 中效果尤为显著
  • 使用 --to / --from 子集构建,避免全量构建
  • 合理划分项目粒度,过细的项目增加调度开销,过粗的项目降低并行度
  • 配置 allowWarningsInSuccessfulBuilds 避免不必要的构建失败重试
  • 使用 rush build --parallelism N 控制并发度,避免资源争用

安全注意事项

  • 依赖审批:通过 rush reviewrush check 审批新依赖,防止供应链攻击
  • 版本锁定rush.jsonpreferredVersions 确保全仓库依赖版本一致
  • pnpm 严格模式:消除幽灵依赖,确保项目只能访问显式声明的依赖
  • 构建脚本控制:pnpm 11 的 allowBuilds 配置确保第三方包的构建脚本受控执行
  • lockfile 完整性:Rush 校验 pnpm-lock.yaml 的完整性,防止未授权修改

已知性能瓶颈

  • 超大规模仓库(500+ 项目)的依赖图计算可能成为瓶颈
  • rush install 在首次运行时(无缓存)耗时较长
  • Windows 平台上的符号链接可能需要管理员权限,影响安装速度
  • TypeScript 项目的类型检查在大型项目中耗时显著(建议使用 Heft 的分阶段构建)

技术对比

Rush vs 同类工具对比表

特性RushNxTurborepopnpm workspaceBazelLerna
定位企业级 Monorepo 管理器智能 Monorepo 构建系统高性能构建系统轻量包管理扩展通用多语言构建系统JS Monorepo 发布工具
语言支持JS/TS only多语言(JS/TS 为主)JS/TS onlyJS/TS only多语言JS/TS only
本地缓存
远程缓存✅ Azure/AWS✅ Nx Cloud✅ Vercel
分布式任务执行🔧 实验性
受影响检测🔧 DIY
MCP Server🔧 社区🔧 社区
发布管理✅ 强
Changelog 生成✅ 自动化
依赖治理✅ 强
代码生成🔧 DIY✅ 插件🔧 DIY🔧 DIY
项目图可视化🔧 DIY
学习曲线中等偏高中等极高
社区规模中等(~6.5K⭐)大(~24K⭐)大(~26K⭐)大(pnpm 生态)大(~23K⭐)中等(已被 Nx 收购)
适用规模超大型(100+包)中大型中小型小型超大型多语言中小型

选型建议

场景推荐工具原因
快速起步的 JS MonorepoTurborepo配置简单,性能优秀
需要代码生成和框架集成Nx丰富的插件生态和代码生成器
大量 NPM 包发布管理Rush内置最完善的发布和版本管理
小型项目共享代码pnpm workspace零额外配置,pnpm 原生支持
多语言超大规模仓库Bazel无与伦比的多语言支持和缓存精度
企业级依赖治理 & 合规Rush最严格的依赖审批和版本控制

最佳实践

生产环境建议

  1. 统一使用 pnpm 作为包管理器
    pnpm 的严格依赖解析和内容寻址存储是 Rush 发挥最大价值的最佳搭档。在 rush.json 中设置 "packageManager": "pnpm" 并锁定 pnpm 版本。

  2. 启用远程构建缓存
    在 CI/CD 中配置 Azure Blob Storage 或 AWS S3 缓存,可大幅减少重复构建时间。首次配置后,所有开发者都能受益于缓存共享。

  3. 使用 Rig 系统统一工具链配置
    将 ESLint、TypeScript、Jest 等配置封装到 rig 包中,避免在每个项目中重复维护相同的配置文件。

  4. 强制 rush change 流程
    在 PR 检查中加入 rush change --verify 步骤,确保每个变更都有明确的版本影响记录和 Changelog 描述。

  5. 合理的项目粒度
    每个子项目应该是一个独立的、有意义的功能单元。过细的项目增加调度开销,过粗的项目降低并行度和缓存命中率。

常见陷阱

  • 忘记 rush install:修改了 package.json 后必须运行 rush install(而非 npm install),否则依赖不会正确链接。
  • 幽灵依赖误判:如果使用 npm/yarn 而非 pnpm,幽灵依赖问题可能导致"本地能跑但发布后报错"。强烈建议使用 pnpm。
  • 循环依赖:Rush 对循环依赖的处理是使用最后一个发布版本,这可能掩盖真实的架构问题。应从根本上消除循环依赖。
  • Windows 符号链接:Windows 上创建符号链接可能需要管理员权限或开启开发者模式,否则 rush install 会失败。
  • Git 历史深度:Rush 依赖 Git 历史进行增量构建分析。浅克隆(--depth 1)可能导致缓存失效。CI 中建议 fetch-depth: 0

推荐模式

# 使用 rushx 在单个项目中执行命令(类似 npm run)
cd apps/web && rushx build
 
# 查看受影响的项目
rush list --from @my-org/changed-package
 
# 部署特定项目
rush deploy --project @my-org/app-web
 
# 检查依赖一致性
rush check
 
# 使用 --impure 标记不可缓存的任务
rush build --impure

技术局限与边界

已知限制

  • 仅支持 JavaScript/TypeScript 生态:不支持 Python、Go、Java 等其他语言。如果仓库包含多语言项目,Rush 不是合适的选择。
  • 社区规模相对较小:与 Nx(~24K⭐)和 Turborepo(~26K⭐)相比,Rush 的社区较小(~6.5K⭐),遇到问题时获取帮助的渠道相对有限。
  • 初始配置复杂度较高:相比 Turborepo 的"几乎零配置",Rush 的初始设置和配置文件较多,需要一定的学习投入。
  • 无原生代码生成能力:不像 Nx 提供丰富的项目生成器和模板,Rush 不提供开箱即用的代码脚手架。
  • 分布式任务执行尚不成熟:Cobuilds 功能仍处于实验阶段,不像 Bazel 或 Nx 那样提供生产级的远程执行能力。
  • 无原生任务拆分(Task Splitting):大型单个任务无法自动拆分到多台机器并行执行。
  • 项目图可视化需自行实现:没有内置的项目依赖图可视化工具(Lockfile Explorer 仅用于依赖锁文件分析)。

不适用场景

  • 小型项目(< 5 个包):使用 pnpm workspace 或 Turborepo 更轻量
  • 多语言 Monorepo:应选择 Bazel、Pants 或 Gradle
  • 需要丰富代码生成和框架集成的场景:Nx 更合适
  • 快速原型或实验性项目:Rush 的配置开销不值得
  • 非 JavaScript/TypeScript 项目:Rush 完全不支持

迁移注意事项

  • 从 pnpm workspace 迁移:相对平滑,主要是添加 rush.json 配置和调整脚本命令
  • 从 Lerna 迁移:需要重新设计发布流程,Rush 的 rush change + rush publish 与 Lerna 的工作流不同
  • 从 Nx 迁移:需要移除 Nx 特有的配置和插件,重新配置构建缓存
  • 迁移到 Rush:建议先在分支上验证,确保所有项目的构建脚本和依赖关系在 Rush 的编排下正常工作

学习资源

官方文档

教程

社区资源

2026 年现状

最新版本

  • @microsoft/rush v5.177.1(2026 年 6 月 20 日发布)— 当前最新稳定版
  • @rushstack/rush-sdk v5.177.0 — Rush SDK,用于编程式访问 Rush 引擎
  • @rushstack/mcp-server v0.2.x — Rush MCP Server,AI 编码助手集成

发展趋势

  1. AI 集成加速
    Rush MCP Server 是 2025–2026 年最重要的新特性之一,由 TikTok 工程团队贡献。它让 AI 编码助手能够理解 Monorepo 的结构化上下文,标志着 Rush 在 AI 辅助开发领域的积极布局。

  2. pnpm 11 兼容性
    Rush 持续跟进 pnpm 的最新版本,v5.175.x 系列已支持 pnpm 11 的 allowBuilds 安全模型和新的供应链安全默认设置。

  3. 分布式构建演进
    Cobuilds 功能从 TikTok 的生产实践中获得了验证,预计将在后续版本中继续完善,向生产级分布式构建能力演进。

  4. ESM 迁移
    Rush Stack 生态正在从 CommonJS 向 ESM(ES Modules)迁移,所有包已采用双格式发布(lib-commonjs + lib-esm)。

社区活跃度

  • GitHub Stars:~6,500+
  • 维护状态:活跃维护中,2026 年 6 月仍有新版本发布
  • 核心贡献者:微软 Rush Stack 团队(@iclanton 等)+ 社区贡献者(TikTok 等)
  • Issue 响应:约 880+ 个 Issue,活跃讨论中
  • 企业用户:Azure SDK、HBO Max、OneDrive、SharePoint、Wix、TikTok 等

未来路线图

  • Rush Reporter 重构(Issue #5858):改进构建报告输出格式和可定制性
  • MCP Server 插件生态扩展:更多 AI 编码助手集成和插件能力
  • 分布式构建能力增强:Cobuilds 从实验性走向稳定
  • 持续跟进 pnpm 新版本:确保与 pnpm 生态的同步演进

总结:Rush 在 2026 年仍然是超大规模 JavaScript/TypeScript Monorepo 领域最成熟、最严谨的选择。虽然在社区规模和易用性上不及 Nx 和 Turborepo,但在依赖治理、发布管理和企业级工程实践方面具有不可替代的优势。AI 集成(MCP Server)的加入为 Rush 注入了新的活力,使其在 AI 辅助开发时代继续保持竞争力。