“rush-lib” API
Rush 为自动化脚本提供了 API。它记录在所有 Rush Stack 项目的集成 API 参考中。
下面是一些使用示例。
虽然这些代码示例以纯 JavaScript 形式呈现,但我们强烈建议您使用 TypeScript 并将您的脚本建模为常规 Rush 项目。初始设置工作量更大,但从长远来看,通常可以节省时间并简化维护工作。
rush-lib vs rush-sdk
您可能会注意到 NPM 包 @microsoft/rush-lib
和 rushstack/rush-sdk
导出相同的 API。它们有什么区别?
@microsoft/rush-lib
是 Rush 的引擎,它实现了所有核心功能。它是一个相对较大的包,还包括一些内置的 Rush 插件,并具有许多 NPM 依赖项。@microsoft/rush
是提供rush
和rushx
命令的CLI(命令行界面),您可以从 shell 中调用这些命令。@microsoft/rush
依赖于@microsoft/rush-lib
,但是,如果您的仓库的rush.json 文件请求不同的rushVersion
,则Rush“版本选择器”将自动安装请求的@microsoft/rush-lib
引擎版本并使用它。这可确保 CLI 命令始终具有确定性行为,而与全局安装的@microsoft/rush
版本无关。@microsoft/rush-sdk
是API 接口,它本身几乎没有 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 单体仓库的库存。