依存モジュールごとパッケージ化するnpmbox

プロキシ環境下でnpm installすると、インストールモジュールが依存しているパッケージでインストールできないケースがある。プロキシ環境外でパッケージを揃えて、オフラインインストール・・みたいなことができないか検討してたところ、npmboxというイメージどおりのツールを発見。

npmboxもnpm配下で動作するモジュールのようで、npm installコマンドでインストールする。これができないと始まらない。共通機能なので-gオプションでインストールする

> npm install -g npmbox

例としてexpressmongooseをパッケージ化してみる。とりあえず、これらをnpm installで任意のプロジェクト内にインストールしておく。(べつに–saveでpackage.jsonに書き込んでおかないとダメというわけではない)

> cat package.json
{
  "name": "test",
  "version": "1.0.0",
  "private": true,
  "dependencies": {
    "express": "^4.13.0",
    "mongoose": "^4.0.6"
  }
}

この状態で、expressとmongooseをオフラインインストールできるようにパッケージ化してみる。npmboxコマンドの後ろにモジュール名を複数しているするだけでパッケージ化される。非常にわかりやすい。

> npmbox express mongoose
Boxing express...
  Querying express
  Querying accepts@~1.2.9
  Querying array-flatten@1.1.0
:
Downloading utils-merge@1.0.0
Downloading vary@1.0.0
Packing C:\Users\neutral\Desktop\doi\test\express.npmbox...
Done.
> ls -l
-rwx------+ 1 Administrators None 408942 Jun 24 20:27 express.npmbox
-rwx------+ 1 Administrators None 1146841 Jun 24 20:30 mongoose.npmbox
drwx------+ 1 Administrators None      0 Jun 24 19:41 node_modules
-rwx------+ 1 Administrators None    138 Jun 24 19:41 package.json

完了すると、拡張子.npmboxのアーカイブらしきファイルが作成される。

今度はパッケージからインストールしてみる。npmunboxコマンドでnpmboxパッケージファイルを解凍する感じでインストールできる。オプションとして–saveをつけることによって、package.jsonに依存モジュールとして記述してくれる。詳細は公式サイトで確認。

> cd ../test2
> npmunbox express.npmbox mongoose.npmbox --save
Unboxing express.npmbox...
Unpacking express...
Installing express...
:
Unboxing mongoose.npmbox...
Unpacking mongoose...
Installing mongoose...
:
> cat package.json
{
  "name": "test2",
  "version": "1.0.0",
  "private": true,
  "dependencies": {
    "express": "^4.13.0",
    "mongoose": "^4.0.6"
  }
}

ちなみにnpmコマンドをプロキシ環境下で使用するための設定も残しておく。
user、passwordはプロキシを通過するための認証ユーザとパスワード。hostとportはプロキシホスト名とポートを指定する。

npm -g config set proxy http://[user]:[password]@[host]:[port]
npm -g config set https-proxy http://[user]:[password]@[host]:[port]
npm -g config set registry http://registry.npmjs.org/