ホームページ > ウェブフロントエンド > jsチュートリアル > MRI パッケージを使用して CLI フラグと引数をスキャンする

MRI パッケージを使用して CLI フラグと引数をスキャンする

Linda Hamilton
リリース: 2024-11-16 11:19:03
オリジナル
1054 人が閲覧しました

この記事では、Changesets のソース コードから抜粋した使用例とともに、MRI パッケージの概要を説明します。

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 の使用法を見てみましょう。

変更セットでの MRI の使用:

MRI は Changesets CLI パッケージにインポートされていることがわかります

Scan for CLI flags and arguments using MRI package

npxchangesetadd または npxchangeset コマンドを使用して変更セットを追加すると、以下に示すように CLI パッケージでアクセスされます。

const args = process.argv.slice(2);
ログイン後にコピー

チェンジセット内の CLI 引数を解析しています

以下のコードは、Changeset CLI パッケージで mri がどのように使用されるかを示しています

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)
ログイン後にコピー

最初のパラメータは省略されます。_ ドキュメントでは、'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 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート