日常のプログラミングの冒険でJavaScriptに既に精通している場合は、簡単なコマンドラインスクリプトを作成する必要があるときにJavaScriptに到達しても、それほど衝撃的ではありません。 クイックスクリプトはやや汚れる傾向があり、通常は使用法のドキュメントが不足しています。 command-line-usageパッケージを使用すると、プロ並みのスクリプト使用法の出力をすばやく汚いスクリプトに簡単に追加できます。

入門

command-line-usageを追加する必要があります。

# npm
$ npm install command-line-usage --save

# Yarn
$ yarn add command-line-usage

必ずcommand-line-usageをインポートしてください。

const cliUsage = require('command-line-usage');

この記事はcommand-line-usageパッケージに焦点を当てていますが、このパッケージはchalkテンプレートリテラル構文を活用し、chalk.red()などのchalkメソッドと非常にうまく機能することに注意してください。 ]。

テンプレートリテラル構文の代わりにchalkメソッドを使用する場合は、command-line-usageの依存関係であるchalkもインポートしてください。

const chalk = require('chalk');

chalkの詳細については、記事Chalkを使用したコマンドラインNode.jsスクリプトからの出力のスタイリングをご覧ください。

基本的な使用法

すべてがインストールされ、適切にインポートされると、いくつかの簡単な使用情報を作成できます。

const sections = [
  {
    header: '🐊 Alligator.io CLI Script',
    content: 'From {bold your friends} at {underline Alligator.io}',
  },
  {
    header: 'Usage',
    content: [
      '% script {bold --file} {underline /path/to/file} ...',
    ],
  },
];

const usage = cliUsage(sections);
console.info(usage);

sections配列には、使用情報に表示する情報のグループが含まれています。 各セクション内のさまざまなオプションを使用して、必要な数のセクションを作成できます。

sections配列をcommand-line-usageで実行すると文字列が生成され、コンソールに記録できます。

リスト引数

スクリプトの引数を一覧表示するには、一連のオプションを使用するoptionListプロパティを使用できます。

const sections = [
  {
    header: 'Mandatory Options',
    optionList: [
      {
        name: 'file',
        alias: 'f',
        type: String,
        typeLabel: '{underline /path/to/file}',
        description: 'The file to do stuff with',
      },
    ],
  },
  {
    header: 'Optional Stuff',
    optionList: [
      {
        name: 'letters',
        alias: 'l',
        type: String,
        typeLabel: '{underline letter} ...',
        description: 'This option takes multiple values',
        multiple: true,
        defaultOption: 'a b c',
      },
      {
        name: 'help',
        alias: '?',
        type: Boolean,
        description: 'Print this usage guide.',
      }
    ],
  },
];

const usage = cliUsage(sections);
console.info(usage);

command-line-usageパッケージは、テーブルレイアウトで引数の間隔を空けることにより、すべてのハードワークを処理します。

テーブルレイアウト

引数リストを表示するときに使用されるテーブルレイアウトと言えば、contentプロパティを配列に渡すときにもテーブルレイアウトを使用できます。 文字列の代わりにオブジェクトの配列を渡すだけで、command-line-usageは情報を表のようにフォーマットします。

const sections = [
  {
    header: 'Table Layout Example',
    content: [
      {
        desc: 'More great Alligator.io articles:',
        url: '{underline https://alligator.io}',
      },
      {
        desc: '`command-line-usage` on GitHub:',
        url: '{underline https://git.io/fh9TQ}',
      },
    ],
  },
];

const usage = cliUsage(sections);
console.info(usage);

楽しんで

時々あなたはただ楽しみたいだけです。 前述のように、command-line-usagechalkを活用できます。つまり、色のスプラッシュで使用量の出力にスパイスを加えることができます。

少しクレイジーにするために、内部のデモシーンアーティストをチャネリングし、エスケープコードを備えたASCII / ANSIアートをまとめる場合は、rawプロパティを含めて、正しく表示されるようにする必要があります。

const sections = [
  {
    header: 'Raw Like Sushi',
    raw: true,
    content: [
      '{red   ,iiiiiiiiii,}',
      '{red ,iiiiiiiiiiiiii,}',
      `{red iii'        'ii'}`,
      `{white   '.________.'}`,
    ],
  },
];

const usage = cliUsage(sections);
console.info(usage);

🍣

結論

command-line-usageパッケージは、スクリプトの使用法情報を簡単に生成できるという点で驚くべきものですが、それでも多少不足しています。 覚えておくべきことの1つは、パッケージは実際にはコマンドライン引数の処理を行わないということです。

コマンドライン引数の実際の処理は、引数ベクトルprocess.argvを自分で解析して独自のソリューションをローリングするか、commanderなどのパッケージを利用して処理する必要があります。

詳細については、記事Node.jsスクリプトでのコマンドライン引数の処理をご覧ください。