Skip to content
On this page

Rush 详解

简介

Rush 是由 Microsoft 开发的企业级 monorepo 管理工具,专为大型项目和团队设计。它提供快速的依赖安装、高效的构建系统和强大的发布管理功能,适用于需要处理大量包和复杂依赖关系的大型组织。

安装

全局安装 Rush

bash
npm install -g @microsoft/rush

初始化 Rush 工作区

bash
rush init

项目结构

my-rush-repo/
├── rush.json
├── common/
│   ├── config/
│   │   ├── rush/
│   │   │   ├── repo-state.json
│   │   │   ├── experiments.json
│   │   │   └── ...
│   ├── scripts/
│   └── temp/
├── apps/
├── libraries/
├── tools/
└── ...

核心配置

rush.json

Rush 工作区的主要配置文件:

json
{
  "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/rush.schema.json",
  "rushVersion": "5.70.0",
  "pnpmVersion": "6.7.1",
  "projects": [
    {
      "packageName": "my-app",
      "projectFolder": "apps/my-app",
      "shouldPublish": true,
      "versionPolicyName": "library-policy"
    },
    {
      "packageName": "my-library",
      "projectFolder": "libraries/my-library",
      "shouldPublish": true
    }
  ],
  "repository": {
    "url": "https://github.com/microsoft/rush-example",
    "defaultBranch": "main"
  }
}

核心功能

1. 依赖管理

Rush 支持多种包管理器:

  • PNPM(推荐)
  • NPM
  • Yarn

2. 并行构建

  • 智能任务调度
  • 依赖关系自动分析
  • 最大化并行度

3. 变更日志管理

  • 自动生成 CHANGELOG.md
  • 与 SemVer 兼容的版本控制
  • 支持预发布版本

基本命令

1. 安装依赖

bash
rush install

2. 更新依赖

bash
rush update

3. 构建所有项目

bash
rush build

4. 运行脚本

bash
rushx <script-name>

5. 添加包

bash
rush add --package <package-name>

6. 重新安装

bash
rush reinstall

高级功能

1. 变更检测

bash
rush change

生成变更日志,记录自上次发布以来的更改。

2. 发布管理

bash
rush publish --publish

自动发布包到 npm 注册表。

3. 并行执行

bash
rush build --parallelism 4

控制并行执行的任务数量。

4. 部分安装

bash
rush install --no-link
rush link

分离安装和链接步骤。

配置文件

1. common/config/rush/pnpm-lock.yaml

PNPM 依赖锁定文件。

2. common/config/rush/artifactory.json

Artifactory 配置文件(如果使用私有仓库)。

3. common/config/rush/browser-approved-packages.json

批准用于浏览器的包列表。

4. common/config/rush/generator-blacklist.json

生成器黑名单。

工作区协议

Rush 支持工作区协议,允许包之间相互引用:

json
{
  "name": "my-app",
  "dependencies": {
    "my-library": "workspace:*"
  }
}

最佳实践

1. 项目组织

  • 按功能或业务领域组织包
  • 使用一致的命名约定
  • 保持包职责单一

2. 版本管理

  • 使用 rush change 命令记录变更
  • 定期发布新版本
  • 使用版本策略管理相关包

3. CI/CD 集成

  • 使用 Rush 的并行构建功能优化 CI 时间
  • 实施智能缓存策略
  • 利用 Rush 的部分构建功能

企业级特性

1. 访问控制

  • 支持私有包管理
  • 与企业身份验证系统集成
  • 详细的权限管理

2. 审计与合规

  • 包依赖审计
  • 许可证合规检查
  • 安全漏洞扫描

3. 监控与分析

  • 构建性能分析
  • 依赖关系可视化
  • 使用统计报告

优缺点

优点

  • 专为企业级项目设计
  • 优秀的性能表现
  • 强大的依赖管理
  • 详细的文档和企业支持
  • 成熟的变更日志管理

缺点

  • 配置相对复杂
  • 学习曲线较陡峭
  • 主要面向大型项目
  • 对小型团队可能过于重量级

与其他工具对比

Rush vs Lerna

  • Rush 更适合企业级应用
  • 提供更完整的发布管理
  • 有更好的性能优化

Rush vs Nx

  • Nx 提供更多代码生成功能
  • Rush 更专注于包管理和发布
  • Rush 有更强的企业级特性

Rush vs Yarn/PNPM Workspaces

  • Rush 提供更高级的构建和发布功能
  • Workspaces 主要关注依赖管理
  • Rush 有更完整的 monorepo 解决方案