首頁 >web前端 >js教程 >使用 MRI 套件掃描 CLI 標誌和參數

使用 MRI 套件掃描 CLI 標誌和參數

Linda Hamilton
Linda Hamilton原創
2024-11-16 11:19:031049瀏覽

在本文中,提供了 MRI 套件的概述以及從 Changesets 原始碼中選取的使用範例。

MRI 套餐:

您可以使用 MRI 套件快速掃描標誌和參數。它是 yargs-parser 的替代品。

安裝

npm install - save mri

用法

// Example CLI with options 
$ demo-cli - foo - bar=baz -mtv - hello world

以下程式碼摘自 MRI npm 套件文件。

const mri = require('mri');
const argv = process.argv.slice(2);
mri(argv);
//=> { _: ['hello', 'world'], foo:true, bar:'baz', m:true, t:true, v:true }
mri(argv, { boolean:['bar'] });
//=> { _: ['baz', 'hello', 'world'], foo:true, bar:true, m:true, t:true, v:true }
mri(argv, {
 alias: {
 b: 'bar',
 foo: ['f', 'fuz']
 }
});
//=> { _: ['hello', 'world'], foo:true, f:true, fuz:true, b:'baz', bar:'baz', m:true, t:true, v:true }

了解更多關於選項的資訊:

  • 別名

  • 布林值

  • 預設

本質上,我們將 CLI 參數轉換為物件。現在我們了解了 MRI 的基礎知識,是時候看看它在變更集中的用法了。

變更集中的 MRI 使用:

發現Changesets CLI套件中導入了MRI

Scan for CLI flags and arguments using MRI package

當您使用指令 npxchangeset add 或 npxchangeset 新增變更集時,可以在 CLI 套件中存取這些變更集,如下所示。

const args = process.argv.slice(2);

解析變更集中的 CLI 參數

下面的程式碼展示了mri如何在Changeset CLI套件中使用

const parsed = mri(args, {
 boolean: ["sinceMaster", "verbose", "empty", "open", "gitTag", "snapshot"],
 string: [
 "output",
 "otp",
 "since",
 "ignore",
 "tag",
 "snapshot",
 "snapshotPrereleaseTemplate",
 ],
 alias: {
 // Short flags
 v: "verbose",
 o: "output",
 // Support kebab-case flags
 "since-master": "sinceMaster",
 "git-tag": "gitTag",
 "snapshot-prerelease-template": "snapshotPrereleaseTemplate",
 // Deprecated flags
 "update-changelog": "updateChangelog",
 "is-public": "isPublic",
 "skip-c-i": "skipCI",
 },
 default: {
 gitTag: true,
 },
});

解析後的值如下所示,我根據文件推斷出這一點:

{
 // string value (if you have used 'add' in npx changeset add)
 ['add'],
// boolean values
 "sinceMaster": true, 
 "verbose": true, 
 "empty": true, 
 "open": true, 
 "gitTag": true, 
 "snapshot": true
// string values
 // Note: if you have passed these options in your CLI, these keys will be parsed as string, no matter the what you pass in
 // example: if you pass in - otp=123, 123 here, even though is a number, gets parsed as string since otp is configured to be parsed as
 // string in the above code
 "output",
 "otp",
 "since",
 "ignore",
 "tag",
 "snapshot",
 "snapshotPrereleaseTemplate",
// The alias option in mri allows you to define alternative names (aliases) for CLI arguments.
 // This is particularly useful for supporting:
// Short flags: Such as -v for - verbose.
 // Kebab-case flags: Allowing flags like - since-master to map to camelCase variables in JavaScript (e.g., sinceMaster).
 // Deprecated flags: If you want to support older names for backward compatibility but still map them to the current property names.
}

解析的變數用於從 /run.ts 匯入的名為 run 的函數

// run function call
run(parsed._, parsed, cwd).catch((err)

第一個參數是pared._,因為在文件中,規定像'add'這樣的解析指令看起來像{ _: ['add']}

// run function definition
export async function run(
 input: string[],
 flags: { [name: string]: any },
 cwd: string
) {

parsed 包含基於 CLI 參數和布林值、字串、預設值、別名的配置集的 mri 解析物件。

cwd 是目前工作目錄,您可以使用 process.cwd() 取得它

關於我們:

在Thinkthroo,我們研究大型開源專案並提供架構指南。我們開發了使用 Tailwind 建構的可重複使用元件,您可以在專案中使用它們。我們提供 Next.js、React 和 Node 開發服務。

與我們預約會面討論您的專案。

Scan for CLI flags and arguments using MRI package

參考資料:

  1. https://www.npmjs.com/package/mri

  2. https://github.com/changesets/changesets/blob/main/packages/cli/src/index.ts#L1C18-L1C21

  3. https://github.com/changesets/changesets/blob/main/packages/cli/src/index.ts#L9

以上是使用 MRI 套件掃描 CLI 標誌和參數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn