Node.js
npm

npm-scriptsについて

More than 3 years have passed since last update.

npm-scriptsについて

npmは"scripts"というフィールドにshell scriptとエイリアスコマンドを指定できる。

{
  "name": "myapp"
  "scripts": {
    "start":      "node app.js",
    "production": "NODE_ENV=production node app.js"
  }
}

キーはnpm startのようにエイリアスとして利用できる名前となり、値にはshell scriptをワンラインで指定する。

キーは自由に指定できるが、中には既に予約されている名前があり、それらを含めて以下の4種類に分類できる。

意味付けだけがされたnpm-scripts

  • start
    • appを起動するようなshell scriptのエイリアスとして用いる。
  • restart
    • appを再起動させるためのshell scriptのエイリアスとして用いる。
  • stop
    • appを停止させるためのshell scriptのエイリアスとして用いる。
  • test
    • appをテストするようなshell scriptのエイリアスとして用いる。

他のnpmコマンドをフックする形で実行されるnpm-scripts

  • publish
    • npm publishの後に実行される。
  • install
    • npm installの後に実行される。
  • uninstall
    • npm uninstallの前に実行される。
  • update
    • npm updateの後に実行される。

これ以外のnpmコマンドをフックするnpm-scriptsも設定可能で、node_modules/.hooks/以下になんやかんやするらしい。

予約された名前ではないnpm-scripts

上記以外のすべてのnpm-scripts(例 : 'production')は、npm productionのようには実行できない。

予約された名前ではないnpm-scriptsは、npm run-scriptを用いて、下記のように実行する。

npm run-sctipt production

alias:

npm run production

npm-scriptsの前後に実行されるnpm-scripts

下記に挙げるものを除くすべてのnpm-scriptsには、プレフィックスをつけることで、そのnpm-scriptsの前後に実行されるものがある。

  • pre
    • そのnpm-scriptsの前に実行される。
    • 例 : prestartは、startの前に実行される。
  • post
    • そのnpm-scriptsの後に実行される。
    • 例 : prestartは、startの後に実行される。

中でも、下記のものは実行タイミングが個別に指定されている。

  • prepublish
    • npm publishの前に実行される。
  • preinstall
    • npm installの前に実行される。
  • postuninstall
    • npm uninstallの後に実行される。
  • preupdate
    • npm updateの前に実行される。

npm-configについて

同様に、"config"というフィールドにappの設定を記述しておくことができる。

{
  "name": "myapp"
  "scripts": {
    "start": "node app.js"
  },
  "config": {
    "port": "8080"
  }
}

ここで記述されたappの設定は、npm-scriptsで実行する時、環境変数にnpm_package_config_というプレフィックスがついて設定される。

http.createServer(function() {
  ;
}).listen(process.env.npm_package_config_port);

このnpm-configの記述は、npmコマンドを用いて行うこともできる。

npm config set myapp:port 80