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

“rush-lib” API

Rush 为自动化脚本提供了 API。它记录在所有 Rush Stack 项目的集成 API 参考中。

     API 参考:@microsoft/rush-lib 包

下面是一些使用示例。

虽然这些代码示例以纯 JavaScript 形式呈现,但我们强烈建议您使用 TypeScript 并将您的脚本建模为常规 Rush 项目。初始设置工作量更大,但从长远来看,通常可以节省时间并简化维护工作。

rush-lib vs rush-sdk

您可能会注意到 NPM 包 @microsoft/rush-librushstack/rush-sdk 导出相同的 API。它们有什么区别?

  • @microsoft/rush-lib 是 Rush 的引擎,它实现了所有核心功能。它是一个相对较大的包,还包括一些内置的 Rush 插件,并具有许多 NPM 依赖项。

  • @microsoft/rush 是提供 rushrushx 命令的CLI(命令行界面),您可以从 shell 中调用这些命令。@microsoft/rush 依赖于 @microsoft/rush-lib,但是,如果您的仓库的rush.json 文件请求不同的 rushVersion,则Rush“版本选择器”将自动安装请求的 @microsoft/rush-lib 引擎版本并使用它。这可确保 CLI 命令始终具有确定性行为,而与全局安装的 @microsoft/rush 版本无关。

  • @microsoft/rush-sdkAPI 接口,它本身几乎没有 NPM 依赖项,主要充当访问 @microsoft/rush-lib 引擎的代理。它提供了两个主要优势

    • 版本选择器: 如果您的工具从 @microsoft/rush-sdk 导入,那么它将根据rush.json 中的 rushVersion 加载适当的引擎版本。例如,如果您的脚本直接从 @microsoft/rush-lib 导入,并且它是不同的版本,那么引擎可能无法解析格式已更改的配置文件。

    • 内部 API: @microsoft/rush-sdk 包括允许您从 @microsoft/rush-lib 导入内部 API 的存根。内部 API 通常难以访问,因为该包以 Webpack 包的形式分发。

    有关更多详细信息,请参阅@rushstack/rush-sdk 文档。

示例 1:读取 rush.json 配置

建议使用RushConfiguration 类而不是尝试将rush.json 加载为 JSON 文件,该类提供了更丰富的数据视图集。

例如,此脚本将显示所有 Rush 项目及其文件夹。

const rushSdk = require('@rushstack/rush-sdk');

// loadFromDefaultLocation() will search parent folders to find "rush.json" and then
// take care of parsing it and loading related config files.
const rushConfiguration = rushSdk.RushConfiguration.loadFromDefaultLocation({
startingFolder: process.cwd()
});

for (const project of rushConfiguration.projects) {
console.log(project.packageName + ':');
console.log(' ' + project.projectRelativeFolder);
}

示例 2:修改 package.json 文件

如果您要修改package.json 文件,PackageJsonEditor 类提供了有用的验证和规范化。

const rushSdk = require('@rushstack/rush-sdk');

const rushConfiguration = rushSdk.RushConfiguration.loadFromDefaultLocation({
startingFolder: process.cwd()
});

// This will find "@rushstack/ts-command-line" in rush.json, without needing to specify the NPM scope
const project = rushConfiguration.findProjectByShorthandName('ts-command-line');

// Add lodash as an optional dependency
project.packageJsonEditor.addOrUpdateDependency('lodash', '4.17.15', 'optionalDependencies');

// Save the modified package.json file
project.packageJsonEditor.saveIfModified();

示例 3:生成 README.md 摘要

对于更现实的示例,repo-toolbox/src/ReadmeAction.ts 工具使用这些 API 生成README.md Rush Stack 单体仓库的库存。