ログイン中のQiita Team
ログイン中のチームがありません

Qiita Team にログイン
コミュニティ
OrganizationイベントアドベントカレンダーQiitadon (β)
サービス
Qiita JobsQiita ZineQiita Blog
JavaScript
Node.js
npm
35
どのような問題がありますか?

この記事は最終更新日から3年以上が経過しています。

投稿日

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

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

参考

ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
star__hoshi
Mobile Application Engineer.

コメント

この記事にコメントはありません。
あなたもコメントしてみませんか :)
ユーザー登録
すでにアカウントを持っている方はログイン
35
どのような問題がありますか?
ユーザー登録して、Qiitaをもっと便利に使ってみませんか

この機能を利用するにはログインする必要があります。ログインするとさらに下記の機能が使えます。

  1. ユーザーやタグのフォロー機能であなたにマッチした記事をお届け
  2. ストック機能で便利な情報を後から効率的に読み返せる
ユーザー登録ログイン
ストックするカテゴリー