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/rushCLI(命令列介面),提供您可以從 Shell 呼叫的 rushrushx 指令。@microsoft/rush 依賴 @microsoft/rush-lib,但是如果您儲存庫的 rush.json 檔案請求不同的 rushVersion,則Rush「版本選取器」會自動安裝請求版本的 @microsoft/rush-lib 引擎並改用該版本。這樣可確保 CLI 指令始終具有確定性的行為,而不管全域安裝的 @microsoft/rush 版本為何。

  • @microsoft/rush-sdkAPI 介面,本身很少有 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 清單。