$ npm install -g npm-cli-sample
でインストールできる npm ライブラリを作成していきます。
npm init
npm init
で package.json の雛形を作成します。
$ mkdir npm-cli-sample
$ cd npm-cli-sample
$ npm init
...
package name: (npm-cli-sample) # そのまま Enter を押すとディレクトリ名になる
version: (1.0.0) 0.0.1 # version
description: npm cli sample # 説明
entry point: (index.js) # 後で書き換えるのでなんでも良い
test command: # 最初はテストいらないのでそのまま Enter
git repository: # GitHub などレポジトリがあれば入力
keywords: npm cli sample # npm 検索のための keyword
author: star__hoshi # 作成者
license: (ISC) MIT # ライセンス
About to write to /.../package.json:
{
"name": "npm-cli-sample",
"version": "0.0.1",
"description": "npm cli sample",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"npm",
"cli",
"sample"
],
"author": "star__hoshi",
"license": "MIT"
}
コマンドライン用に修正
cli 用のアプリケーションでは bin の下に {"コマンド名": "entorypoint"}
と書きます。
package.json は以下のように修正します。
{
"name": "npm-cli-sample",
"version": "0.0.1",
"description": "cpm cli sample",
- "main": "index.js",
+ "bin": {
+ "npm-cli-sample": "bin/npm-cli-sample"
+ },
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"npm",
"cli",
"sample"
],
"author": "star__hoshi",
"license": "MIT"
}
npm i
npm install
しておきましょう。 node のバージョンによっては package-lock.json が作成されます。
bin/npm-cli-sample を作成
ひとまずこんな感じで作成。
#!/usr/bin/env node
'use strict'
console.log('Hello World')
1 行目は node で動かすために必要、 2 行目はなくても良いけどあった方が良さそうです。
* “use strict”(厳格モード)を使うべきか?|もっこりJavaScript|ANALOGIC(アナロジック)
とりあえず動かしてみる
$ node bin/npm-cli-sample
Hello World
うごいた!
npm link
$ npm link
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN npm-cli-sample@0.0.1 No repository field.
up to date in 0.07s
/opt/brew/bin/npm-cli-sample -> /opt/brew/lib/node_modules/npm-cli-sample/bin/npm-cli-sample
/opt/brew/lib/node_modules/npm-cli-sample -> /Users/hoge/git/npm-cli-sample
これで npm として利用できる symlink を貼ってくれます。 link | npm Documentation
$ npm-cli-sample
Hello World
うごいた!
引数を取得する
cli で動くなら引数が必要なので、以下のように動くようにしてみましょう。
$ npm-cli-sample -n hoge
Hello, hoge!
commandar.js
引数を受け取るライブラリとして、 tj/commander.js: node.js が便利そうなので入れます。
$ npm i commander --save
* process.argv
を自力パースする場合はライブラリは不要です。
bin/npm-cli-sample
#!/usr/bin/env node
'use strict'
const program = require('commander')
program
.usage('-n yourname')
.option('-n, --name <value>', 'your name', String, 'World')
.parse(process.argv)
console.log('Hello ' + program.name + '!')
option の第一引数は引数の key, 第二は説明、 第三は型の変換、第四はデフォルト引数です。
第三、第四引数はなくても問題ありません。詳しくは本家ドキュメントを。
実行
-h
で help が出せる。
$ npm-cli-sample -h
Usage: npm-cli-sample -n yourname
Options:
-n, --name <value> your name (default: World)
-h, --help output usage information
-n
で name を指定して実行。
$ npm-cli-sample -n hoge
Hello hoge!
引数なしだとデフォルト引数が利用される。
$ npm-cli-sample
Hello World!
引数を利用することができるようになりました。
npm publish
npm ライブラリとして公開します。
と言っても Publish する前にユーザ登録が必要です。
https://www.npmjs.com/signup からユーザ登録します。
$ npm adduser
# user, password, mail など聞かれるので登録した情報を答える
そしたら以下で公開。本当に公開されてしまうので注意。
$ npm publish
そしたら npm -g i npm-cli-sample
で install できるはずです。