Rush Stack商店博客活动
跳至主要内容

日常命令

您的日常工作流程只需要几个 Rush 命令

rush update

请记住,每当 package.json 文件发生更改时,都要运行 rush update。换句话说

  • 从 git 中拉取新的更改后(例如 git pull
  • 以任何方式手动编辑任何项目的 package.json 文件后
  • 编辑任何影响版本的文件后(例如 pnpmfile.jscommon-versions.json 等)

rush update 操作可能会更改 common/config 下的一些文件。如果是这样,您应该将这些更改提交到 Git 并将其包含在您的 PR 中。如有疑问,请运行 rush update - 如果一切都已经更新,它将不会花费任何时间!

rush update 的作用

  1. Rush 检查/应用各种策略,这些策略有时会更新 common/config 下的文件。
  2. Rush 将所有项目的 package.json 文件与仓库的通用缩减包装文件进行比较,以查看它是否有效。
  3. 如果它已过期,包管理器将更新缩减包装文件。
  4. 无论哪种方式,包管理器都会将所有依赖项安装到 common/temp/node_modules 文件夹中。
  5. 最后,Rush 为每个项目构建一个本地 node_modules 文件夹,方法是创建指向 common/temp/node_modules 的符号链接。(这与 rush link 操作相同。)

什么是这个“缩减包装文件”?

大多数项目不会为依赖项指定确切的版本,例如 1.2.3,而是指定 SemVer 范围,例如 1.x^1.2.3。就其本身而言,这意味着安装的内容将取决于当时最新的版本。这种 非确定性 是不好的:对于在星期一构建的 Git 分支来说,这将令人抓狂,因为它在星期二由于库的新版本而神秘地失败了。缩减包装文件通过在一个大型文件中存储完整的安装计划来解决这个问题,该文件由 Git 跟踪。

缩减包装文件具有不同的名称,具体取决于您的仓库正在使用的 包管理器shrinkwrap.yamlnpm-shrinkwrap.jsonyarn.lock

您会注意到,自动化的 CI 作业使用 rush install 而不是 rush update。区别在于 rush install 不会更新任何文件。相反,如果存在过时问题,它将使您的 PR 构建失败,以告知您忘记运行 rush update 或忘记提交结果。(有些人选择使用 rush install 作为他们的日常命令,以便捕获对缩减包装文件的意外更改。)

rush rebuild

在拉取最新的更改后,是时候编译所有内容了。rush rebuild 会对仓库中的每个项目进行完整的清理构建。

如果您的工具链支持增量构建,您也可以使用 rush build 来仅构建已更改的项目。

rushx

如果您只想构建一个项目,可以使用 rushx 命令。您可以在要操作的项目文件夹下运行它。rushx 命令类似于 npm run,但输入更少,错误报告更好,并且具有命令行帮助。

rush check

在编辑 package.json 文件后,可以运行 rush check 来查看是否有多个项目依赖于同一个库的不同版本。在单仓库环境中,这是不可取的。许多仓库将使用 rush check 作为 CI 构建步骤,因此如果您引入并行版本,它们可能会使您的 PR 构建失败。

rush change

如果您在作为 NPM 包发布的库上工作,您的仓库可能要求您包含变更日志条目作为您的 PR 的一部分。您会知道,因为您的 PR 构建会在 rush change --verify 步骤中失败。

要编写变更日志,首先将任何待处理的工作提交到 Git。然后在仓库工作文件夹下的任何地方键入 rush change。此命令将检查您的 Git 历史记录,以确定哪些项目文件夹有差异。基于此,它将提示您为每个项目编写变更日志条目。每个变更日志条目都存储在 common/changes 下的单独文件中。您应该将这些文件添加到 Git 并提交它们。

稍后,Rush 的自动化发布工作流程将检查这些文件,以确定哪些包需要发布。它将删除这些文件并将您的消息复制到包的 CHANGELOG.md 文件中。

👉 查看 编写变更日志,了解有关编写变更日志的技巧。

常见场景

就是这样!这些是所有常用的 Rush 命令。

将所有内容组合起来,一个典型的日常咒语可能如下所示

# Pull the latest changes from Git
git pull

# Install NPM packages as needed
rush update

# Do a clean rebuild of everything
rush rebuild

# Work on one project
cd ./my-project

# Let's assume there is a "start" script in the package.json.
# (To see the available commands, type "rushx" by itself.)
rushx start