Skip to content

npm-scriptsで事前事後の処理を記述する

npm やその変種は package.json にスクリプトを記述できるのだが、例えばテストを実行するときに、前提としてRedisやDBなどが必要になる場合は多い。このとき手動や Makefile のレシピを作ってもいいのだけど、どうせなら npm だけで完結したい。

この場合、習慣としては test:services:starttest:services:stop を作っておいて、test から呼び出す形になる。

Terminal window
npm run test:services:start && ts-mocha ... && npm run test:services:stop

なんだけど、こうすると ts-mocha に引数を渡すことができない。テストを実行する際にはテストケースを絞り込みたいことはよくあるので引数が渡せなくなるのは困る。こういった場合は pre または post プリフィックスを付けると事前と事後に実行してくれるスクリプトが書けるので、これを使うといい。

{
"scripts": {
"pretest": "docker compose up -d",
"posttest": "docker compose down",
"test": "docker compose exec runner yarn test:run",
"test:run": "ts-mocha --exit 'lib/*.spec.ts'"
}
}

たとえば npm test — -g xxx とすると、実際のコマンドは以下のように実行される。

Terminal window
docker compose up -d # pretest
docker compose exec runner yarn test:run -g xxx # test
ts-mocha --exit 'lib/*.spec.ts' -g xxx # test:run (これはコンテナ内で動く)
docker compose down # posttest