Skip to content

参考

基于 Rush(@microsoft/rush 5.x)· 核于 2026-07

速查

  • 本页汇总七张表:常用命令 / rush.json 字段 / 配置文件 / 构建选择器 / change type / 版本策略 / 高频坑,末尾附权威链接。
  • 命令一句话:装依赖 rush update(日常)/ rush install(CI);构建 rush build(增量)/ rush rebuild(全量);加依赖 rush add;发布 rush changerush version --bumprush publish;部署 rush deploy;跑脚本 rushx
  • 配置一句话:主配置 rush.json(仓根),其余全在 common/config/rush/;锁文件、build-cache.jsonversion-policies.jsoncommon-versions.jsoncommand-line.json 都在这里。
  • 选择器一句话:--to(含上游依赖,安全)、--from(含下游依赖者,安全)、--impacted-by/--only(略过上游,unsafe)。
  • change type 一句话:major/minor/patch/none(也要写)/hotfix(实验);CI 用 rush change --verify 强制门禁。
  • 版本策略一句话:lockstep(共享版本一起升)vs individual(各升各的,lockedMajor 锁主版本)。
  • 高频坑一句话:全局 rush 是壳跑 rushVersion;仓内禁跑原生包管理器;rush publish 裸跑是 dry run;deploy ≠ publishnone change file 也要写。
  • 版本一句话:@microsoft/rush 5.x(2026-07 为 5.177.x,schema v5),微软 Rush Stack 出品,配套 Heft / rush-sdk / Lockfile Explorer。

一、常用命令表

命令用途关键点
rush update开发者日常装依赖会改 shrinkwrap--full 重算最新、--purge 先清空
rush installCI 装依赖只读、拒改文件;锁文件过期即失败
rush add -p <pkg>给当前项目加依赖自动 rush update--dev/--exact/-m/--all
rush remove -p <pkg>移除依赖同样自动 update
rush check检测跨项目版本不一致ensureConsistentVersions 自动前置调用
rush build增量构建靠内容哈希;-p max 并行、-v 详细日志
rush rebuild全量构建忽略增量;默认不写缓存
rush change生成 change file--verify(CI 门禁)、--bulk(批量)
rush version --bump结算版本 + changelog消费 change files、按策略递增
rush publish发布 npm 包裸跑 = dry run--apply/--publish/--pack
rush deploy打可运行部署包产物到 common/deploy/;≠ publish
rush purge彻底清理优于 git clean;修损坏
rushx <script>跑当前项目 script类似 npm run,更短、报错更好
rush-pnpm <cmd>安全代理 pnpm 子命令rush-pnpm audit
rush init / rush init-autoinstaller / rush init-deploy初始化配置生成 rush.json / autoinstaller / deploy.json

详见入门与各深度页。

二、rush.json 关键字段表

字段说明
rushVersion(必填)版本选择器锁定的引擎版本
pnpmVersion / npmVersion / yarnVersion(三选一必填)声明并锁定包管理器版本
projects(必填)项目清单(packageName / projectFolder / …)
nodeSupportedVersionRange强制团队用一致的 Node SemVer 范围
ensureConsistentVersions开启后 install/publish 前自动跑 rush check
projectFolderMinDepth / MaxDepth项目目录深度(默认 1 / 2)
approvedPackagesPolicy新包审批工作流(按 reviewCategory 分类)
gitPolicyallowedEmailRegExps 邮箱白名单、提交信息模板
repositoryurl / defaultBranch(默认 main)/ defaultRemote
eventHooks生命周期钩子(preRushInstall/postRushBuild 等)
variants平行的替代依赖配置集(迁移期用)
allowedProjectTags集中登记合法 tag,防拼写错误

projects[] 每项packageName(须与 package.json 一致)、projectFolderreviewCategoryshouldPublishpublishFolderversionPolicyNamedecoupledLocalDependencies(旧名 cyclicDependencyProjects,打破循环依赖)、skipRushChecksubspaceNametags

三、配置文件位置表

文件位置作用
rush.json仓根唯一必需主配置(JSONC)
pnpm-lock.yaml / npm-shrinkwrap.json / yarn.lockcommon/config/rush/锁文件,必须提交
.npmrc / .npmrc-publishcommon/config/rush/registry 配置(查找位置与标准 npm 不同)
common-versions.jsoncommon/config/rush/preferredVersions / allowedAlternativeVersions
build-cache.jsoncommon/config/rush/buildCacheEnabled + cacheProvider
version-policies.jsoncommon/config/rush/lockstep / individual 策略
command-line.jsoncommon/config/rush/自定义命令(含 autoinstallerName
rush-project.json各项目 config/声明缓存产物目录(operationSettings
deploy.jsoncommon/config/rush/deploy/deploymentProjectNames / linkCreation
autoinstallercommon/autoinstallers/<name>/隔离工具依赖(独立锁文件)
change filescommon/changes/待发布的版本变更记录
中心化 node_modules / 缓存common/temp/安装 + build cache(rush purge 会清)
增量状态.rush/temp/package-deps 哈希(不提交)

四、构建选择器表

参数含义安全性
--to X / -tX + 其所有上游依赖安全(最常用)
--to-except X / -TX 的依赖,不含 X 自己安全
--from X / -fX + 依赖 + 所有下游依赖者安全
--only X / -o仅 X,忽略依赖unsafe(假定上游就绪)
--impacted-by X / -iX + 下游,忽略上游unsafe
--impacted-by-except X / -I仅下游依赖者,不含 Xunsafe
-c / --changed-projects-only只建变更项目、忽略下游unsafe

取值:包名(@scope/xx)、.(当前目录项目)、git:<branch>(自某提交起改动)、tag:<name>subspace:<name>。并行 -p:整数 / 百分比(50%)/ max。详见增量构建与缓存

五、change type 表

type语义版本效果
major破坏性变更主版本 +1
minor兼容新增次版本 +1
patchBug 修复 / 私有改动修订号 +1
none不需发布不升版本,但仍需写一条
hotfix旧版热修(实验)阻止其他递增

CI 门禁:rush change --verify(改公共包没写即失败,靠 git diff 对比目标分支)。发布两步:rush version --bumprush publish(裸跑 dry run / --apply / --publish / --pack)。详见受控发布

六、版本策略表

维度lockStepVersion(锁步)individualVersion(独立)
版本号一组包共享同一版本、一起升各包独立递增
适用同产品的一组可选组件彼此独立演进的库
关键字段version(当前版)、nextBump(下次递增)、mainProject(共享 CHANGELOG)lockedMajor(可选,锁主版本)
绑定rush.jsonversionPolicyName + shouldPublish: true同左

七、build cache 与依赖治理速查

主题要点
缓存键四要素项目源哈希 + 依赖项目源哈希 + 所有 npm 依赖版本 + 命令行参数
cacheProviderlocal-only / azure-blob-storage / amazon-s3
写权限rush build 读写;rush rebuild 默认不写;RUSH_BUILD_CACHE_WRITE_ALLOWED(0/1)覆盖
增量哈希@rushstack/package-deps-hash文件内容哈希(不看时间戳),状态在 .rush/temp/
phantom 依赖用了没声明的(hoisting 借来)→ pnpm 严格 symlink 根治
doppelganger同一版本被复制多份 → pnpm 模拟 DAG 根治
推荐 pnpm根治上述两者 + 唯一支持 --strict-peer-dependencies
autoinstaller隔离工具依赖(Git hook / 命令 / 插件),不进主锁文件;插件必配

八、高频坑与易错点

  • 全局 rush 只是壳:真正跑的是 rush.jsonrushVersion 锁定的引擎版本。
  • rush install vs rush update:CI 用 install(只读、过期即失败),开发者用 update(改锁文件)。
  • 仓内禁跑原生包管理器npm/pnpm/yarn installnpm linknpm dedupe 会破坏结构;清理用 rush purge
  • rush publish 裸跑是 dry run:不加 --publish 不会真发 registry。
  • none change file 也要写:改了公共包目录就得有 change file,rush change --verify 会拦。
  • deploy ≠ publish:deploy 交付可运行 App(common/deploy/),publish 发 npm 包。
  • --impacted-by / --only 是 unsafe:略过上游依赖,假定其已就绪;求稳用 --to / --from
  • decoupledLocalDependencies 旧名 cyclicDependencyProjects:打破循环依赖 / 强制从 registry 装。
  • 写脚本用 rush-sdk 而非 rush-lib:前者自动对齐引擎版本。
  • Rush ≠ 构建工具:Rush 编排跨项目,单项目构建交给 Heft/自选工具。
  • 实验特性:subspaces / cobuilds / phased builds / Rush 插件 / hotfix change type 均为实验,生产使用需谨慎。

九、权威链接