nodeコマンド以外の起動コマンド(node-dev/forever/npm start/npm test)

通常Node.jsでのスクリプト起動コマンドはnodeコマンドです。しかし、nodeコマンドは下記の理由で使いづらい点があります。

  • リソースの変更時には、スクリプトの停止・起動が必要
  • エラー等によって停止してしまい、永続しない

加えてnpmコマンドからの起動方法についてもまとめました。

node-dev

開発時に使えるコマンドです。リソースの変更時に自動的に読込みし直してくれます。
インストールと実行方法は以下の通り。

$ npm install node-dev -g
$ node-dev app.js

forever

スクリプトを永続的に起動してくれます。実際のサービス時に使えそうです。

$ npm install -g forever
$ forever start app.js

listコマンドで実行中のスクリプトを確認できたり、restartで再起動もできます。

$ forever list
info:    Forever processes running
data:        uid  command                   script forever pid   logfile                 uptime        
data:    [0] 4Cn2 /root/nvm/v0.8.6/bin/node app.js 28142   28144 /root/.forever/4Cn2.log 0:0:17:25.840 
$ forever restart 4Cn2      
info:    Forever restarted process(es):
data:        uid  command                   script forever pid   logfile                 uptime        
data:    [0] 4Cn2 /root/nvm/v0.8.6/bin/node app.js 28142   28144 /root/.forever/4Cn2.log 0:0:17:38.543 

npm start/npm test

npmコマンドはモジュールのインストールだけでなく、様々なオプションが使えます。
参考)npm についてまとめてみる - need something more...
上記のnode-dev/foreverを使い、

  • 開発環境ではnpm testコマンド
  • 本番環境ではnpm startコマンド

で起動できるようにしてみました。

※多分testオプションはモジュールやスクリプトの単体・結合テストをするものだと思いますので、本来の使い方とは違うと思います。

package.json

{
  "name": "application-name",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "NODE_ENV=production forever start app.js",
    "test": "node-dev app.js"
  },
  "dependencies": {
    "express": "3.0.0rc2",
    "ejs": "*",
    "mongodb": "~1.1.2",
    "xmlhttprequest": "~1.4.2",
    "bcrypt": "~0.7.1"
  }
}

startコマンド時は、環境変数NODE_ENVにproductionを設定しています。