🍣

自作CLIを作成する

2019/01/04に公開

始めに

webpackとか、browser-syncとか、パッケージをインストールしてcliで実行していますが、それを自作する場合の話です。
モジュールをrequire/importする方法は以下の記事を参考にしてください。

https://zenn.dev/numa_san/articles/612aeb6b2a362c

npmパッケージの作成

CLIで実行できるように以下のような設定をします。
重要なところはbinのところです。
requireやimportで使う設定はmainのところに書くため、CLIと併用して定義できます。
ローカルでcliの動作を確認する場合はnodeで直接実行すればいいのでscriptsに定義しておきます。

package.json
{
  "name": "mylib",
  "version": "1.0.0",
  "description": "",
  //"main": "lib.js",  // requireやimportで呼ばれるエントリーポイント。cliとは別で定義可能
  "private": true,
  // cliの定義
  "bin": {
    "mylib-cli": "cli.js"  // keyがコマンド名で、valueが実行されるJSファイルになる
  },
  "scripts": {
    "cli-test": "node cli.js --param hello"  // ローカルで試す場合は直接JSを実行する(引数も渡せる)
  },
  "dependencies": {
    "commander": "^2.19.0",
    "lodash": "^4.17.11",
    "path": "^0.12.7"
  },
  "author": "",
  "license": "MIT"
}

CLIのコードは以下のようなものにしました。
1行目の#!/usr/bin/env nodeはcliで実行するためには必須となります。
commanderを使用すると引数の取得が楽になるので使っています。

cli.js
#!/usr/bin/env node

const program = require('commander');

program
  .option('-p, --param <value>', 'Add params')
  .parse(process.argv);

console.log('receive param: %s', program.param);

動作確認

scriptsに定義していたので、以下で動作確認をします。

$ yarn run cli-test
receive param: hello

またはnodeで直接実行します。

$ node cli.js --param test
receive param: test

packageをインストールして使う

作成したモジュールは以下に配置しているため、以下のコマンドでインストールします。
https://github.com/TakanoriOnuma/test-library

$ yarn add TakanoriOnuma/test-library

scriptsに以下のようなものを定義して実行すればcliが動作します。

{
  "scripts": {
    "cli": "mylib-cli --param use-cli"
  }
}
$ yarn run cli
receive param: use-cli

サンプルコードは以下のリポジトリに置いています。
https://github.com/TakanoriOnuma/test-use-library

補足

ローカルへのインストールがもどかしい場合は、npm linkを使うとグローバルにインストールすることができます。ただし試した後削除する場合はnpm unlinkをするのですが、僕の場合は上手く削除できませんでした。nodebrewとかバージョン管理を使っているためか、あるいは権限がよくなかったのか原因は分かりませんでしたが、npm linkを使う場合は注意してください。

参考URL

https://qiita.com/star__hoshi/items/51c6cc719793abfb337d
https://qiita.com/toshihirock/items/431530172b25352d045f

GitHubで編集を提案

Discussion