-
全局インストールコマンダー(yarn|pnpm | npm)
-
ノードを実行してコマンダースクリプトを実行します
-
コマンダーには、オプション、説明、パースの追加をサポートする組み込みのプログラムがあります。
const { program } = require('commander');
program
.option('--first')
.option('-s, --separator <char>');
program.parse();
const options = program.opts();
const limit = options.first ? 1 : undefined;
console.log(program.args[0].split(options.separator, limit));
program.opts は options パラメータを受け取ることができます。
オプション#
Commander は.option () メソッドを使用してオプションを定義し、オプションの説明を追加することができます。各オプションには、短いオプション名(- の後に単一の文字が続く)と長いオプション名(-- の後に 1 つ以上の単語が続く)を定義できます。カンマ、スペース、または | で区切ります。
解析されたオプションは、Command オブジェクトの.opts () メソッドで取得できます。また、コマンド処理関数に渡されます。
複数の単語を持つ長いオプションの場合、オプション名はキャメルケースに変換されます。たとえば、--template-engine オプションは program.opts ().templateEngine でアクセスできます。
オプションとそのオプション引数はスペースで区切ることもできますし、同じ引数に組み合わせることもできます。オプション引数は短いオプションの後に直接続けることもできますし、長いオプションの後に = を追加することもできます。
serve -p 80
serve -p80
serve --port 80
serve --port=80
-- はオプションの終了を示すため、後続の引数はコマンドによって解釈されず、通常どおり使用できます。
デフォルトでは、オプションの順序はコマンドライン上で固定されておらず、オプションは他の引数の前後に指定することができます。
.opts () が十分でない場合、関連する他のメソッドがあります:
.optsWithGlobals () は、ローカルとグローバルのオプション値をマージして返します
.getOptionValue () と.setOptionValue () は、単一のオプションの値を操作します
.getOptionValueSource () と.setOptionValueWithSource () は、オプション値のソースを含みます。
よく使用されるオプションのタイプ、ブール型オプションと引数付きオプション#
最も一般的な 2 つのオプションは、ブール型オプションと引数付きオプションです。ブール型オプションは、パラメータを設定する必要のないオプションです。もう 1 つのオプションはパラメータを設定できます(そのオプションの後にという形式で宣言されます)。コマンドラインで具体的なオプションとパラメータを指定しない場合、それらは undefined として定義されます。
program
.option('-d, --debug', 'output extra debugging')
.option('-s, --small', 'small pizza size')
.option('-p, --pizza-type <type>', 'flavour of pizza');
program.parse(process.argv);
const options = program.opts();
if (options.debug) console.log(options);
console.log('pizza details:');
if (options.small) console.log('- small pizza size');
if (options.pizzaType) console.log(`- ${options.pizzaType}`);
例を挙げましょう
$ pizza-options -p
error: option '-p, --pizza-type <type>' argument missing
$ pizza-options -d -s -p vegetarian
{ debug: true, small: true, pizzaType: 'vegetarian' }
pizza details:
- small pizza size
- vegetarian
$ pizza-options --pizza-type=cheese
pizza details:
- cheese
複数のブール短いオプションは、ハイフンの後に組み合わせて記述することができ、単一の値を持つオプションと組み合わせることもできます。 たとえば、-d -s -p cheese は - ds -p cheese または - dsp cheese と書くことができます。
予期されるオプション引数を持つオプションは、貪欲であり、値がどのように指定されていても引数を消費します。 したがって、--id -xyz は - xyz をオプション引数として読み取ります。
program.parse (arguments) メソッドを使用して引数を処理し、使用されなかったオプションは program.args 配列に格納されます。このメソッドの引数はオプションであり、省略可能で、デフォルト値は process.argv です。
オプションのデフォルト値#
program の option メソッドに第 3 引数を追加することで、デフォルト値を設定できます。
program
.option('-c, --cheese <type>', 'add the specified type of cheese', 'blue');
program.parse();
console.log(`cheese: ${program.opts().cheese}`)
$ pizza-options
cheese: blue
$ pizza-options --cheese stilton
cheese: stilton
その他のオプションタイプ、否定オプション、およびオプションのオプション引数#
no - で始まるブール型の長いオプションを定義することができます。コマンドラインでこのオプションを使用すると、対応するオプションの値が false に設定されます。no - を持つオプションのみを定義し、対応する no - を持たないオプションを定義しない場合、そのオプションのデフォルト値は true に設定されます。
例: nest g res mq --no-spec
--foo が既に定義されている場合、--no-foo を定義してもデフォルト値は変わりません。
例えば:
program
.option('--no-sauce', 'Remove sauce')
.option('--cheese <flavour>', 'cheese flavour', 'mozzarella')
.option('--no-cheese', 'plain with no cheese')
.parse();
const options = program.opts();
const sauceStr = options.sauce ? 'sauce' : 'no sauce';
const cheeseStr = (options.cheese === false) ? 'no cheese' : `${options.cheese} cheese`;
console.log(`You ordered a pizza with ${sauceStr} and ${cheeseStr}`);
これは、デフォルトでは options.sauce の値が true であるため、sauce のデフォルト値が true である理由です。ユーザーが sauce に関するオプションを使用しない場合、または --sauce オプションのみを使用する場合(指定されたオプション定義に明示的にリストされていない場合)、options.sauce の値は常に true になります。ユーザーが --no-sauce オプションを使用する場合のみ、その値は false に設定されます。
結果を見てみましょう
$ pizza-options
You ordered a pizza with sauce and mozzarella cheese
$ pizza-options --sauce
error: unknown option '--sauce'
$ pizza-options --cheese=blue
You ordered a pizza with sauce and blue cheese
$ pizza-options --no-sauce --no-cheese
You ordered a pizza with no sauce and no cheese