JavaScript
Node.js
npm

コマンドラインで動作する npm ライブラリを作る

More than 1 year has passed since last update.

$ 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 できるはずです。

参考