🍣
自作CLIを作成する
始めに
webpackとか、browser-syncとか、パッケージをインストールしてcliで実行していますが、それを自作する場合の話です。
モジュールをrequire/importする方法は以下の記事を参考にしてください。
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をインストールして使う
作成したモジュールは以下に配置しているため、以下のコマンドでインストールします。
$ yarn add TakanoriOnuma/test-library
scriptsに以下のようなものを定義して実行すればcliが動作します。
{
"scripts": {
"cli": "mylib-cli --param use-cli"
}
}
$ yarn run cli
receive param: use-cli
サンプルコードは以下のリポジトリに置いています。
補足
ローカルへのインストールがもどかしい場合は、npm link
を使うとグローバルにインストールすることができます。ただし試した後削除する場合はnpm unlink
をするのですが、僕の場合は上手く削除できませんでした。nodebrewとかバージョン管理を使っているためか、あるいは権限がよくなかったのか原因は分かりませんでしたが、npm link
を使う場合は注意してください。
参考URL
Discussion