LoginSignup
47
38

More than 5 years have passed since last update.

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

Posted at

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

参考

47
38
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
47
38