Help us understand the problem. What is going on with this article?

npm-scriptsについて

More than 5 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
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away