npmのコマンドを同時実行することができるconcurrently
というmoduleを使った時に、サブコマンドにコマンドライン引数を渡す場合にちょっとハマったのでメモ。
やりたいこと
Firebaseのローカルエミュレーターを立ち上げて、jest
でパスマッチするファイルのみテストをしたい
ダメだった例
以下のようにconcurrentlyで並列タスクを実行するようにしただけではダメでした。
"scripts": {
"test": "concurrently --kill-others --success first \"yarn firebase emulators:start\" \"yarn jest\""
}
# `users`にマッチするファイルのテストを実行
# これではうまくいかない
$ yarn test users
yarn jest
に引数が渡らず、concurrently
自体の引数として認識されてしまうためうまくいかない模様。
解決策
bash -c
でbashのコマンドとして実行し、引数を渡してあげると✌️
"scripts": {
"test": "bash -c 'concurrently --kill-others --success first \"yarn firebase emulators:start\" \"yarn jest ${0}\"'"
}
# `users`にマッチするファイルのテストを実行
# ${0} に`users`が入り、無事にusers**.testだけ実行できる
$ yarn test users