「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
是CLI(命令列介面),提供您可以從 Shell 呼叫的rush
和rushx
指令。@microsoft/rush
依賴@microsoft/rush-lib
,但是如果您儲存庫的 rush.json 檔案請求不同的rushVersion
,則Rush「版本選取器」會自動安裝請求版本的@microsoft/rush-lib
引擎並改用該版本。這樣可確保 CLI 指令始終具有確定性的行為,而不管全域安裝的@microsoft/rush
版本為何。@microsoft/rush-sdk
是 API 介面,本身很少有 NPM 相依性,並且主要充當存取@microsoft/rush-lib
引擎的 Proxy。它提供兩個主要優勢版本選取器:如果您的工具從
@microsoft/rush-sdk
匯入,則它會根據 rush.json 中的rushVersion
載入適當版本的引擎。這很重要,例如,如果您的腳本直接從@microsoft/rush-lib
匯入,而它是一個不同的版本,則引擎可能無法剖析格式已變更的組態檔案。內部 API:
@microsoft/rush-sdk
包含 Stub,可讓您從@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 來產生 Rush Stack Monorepo 的 README.md 清單。