npm-scriptsに関するメモ

最近npm-scriptsを書いていて知ったことなど。

run-script, run, ru

npm-scriptsを実行する場合は

$ npm run-script command

で実行するが、run-scriptでなくともrunruでも実行できる。

引数を渡す

npm 2.0.0からnpm-scriptsを実行する際に--を付加することでnpm-scripts自体に引数を渡せる。

{
  "private": true,
  "scripts": {
    "list": "ls"
  }
}
$ npm ru ls

> @ list /path/to/dir
> ls

package.json
$ npm ru ls -- -l

> @ list /path/to/dir
> ls -l

total 8
-rw-r--r--  1 sasaplus1  staff  59 11 29 22:20 package.json

余計な出力をしない

実行する際に-sを渡すと余計な出力を抑止できる。これはnpm自体のloglevelを変更しているだけ。

純粋にコマンドの出力のみ出力されるようになるので複数のnpm-scriptsをパイプでつなぐこともできる。

$ npm -s ru list -- -l
total 8
-rw-r--r--  1 sasaplus1  staff  59 11 29 22:20 package.json
{
  "private": true,
  "scripts": {
    "build": "npm -s ru find | xargs npm -s ru concat -- | npm -s ru minify > index.min.js",
    "find": "find ./sources -type f -name '*.js'",
    "concat": "awk '{ print }'",
    "minify": "uglifyjs -cm"
  },
  "devDependencies": {
    "uglify-js": "*"
  }
}

上記の例だと個々のコマンドは短くなったのだけど、コマンドをつなぐコマンドは余計に長くなった。分割のしすぎは良くない。