この記事では、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 の使用法を見てみましょう。
MRI は Changesets CLI パッケージにインポートされていることがわかります
npxchangesetadd または npxchangeset コマンドを使用して変更セットを追加すると、以下に示すように CLI パッケージでアクセスされます。
const args = process.argv.slice(2);
以下のコードは、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 開発サービスを提供します。
プロジェクトについて話し合うためのミーティングを予約してください。
https://www.npmjs.com/package/mri
https://github.com/changesets/changesets/blob/main/packages/cli/src/index.ts#L1C18-L1C21
https://github.com/changesets/changesets/blob/main/packages/cli/src/index.ts#L9
以上がMRI パッケージを使用して CLI フラグと引数をスキャンするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。