npmの実装上の制限から、preやpostで始まる名前のnpmスクリプトを作っても想定したようには動かないことがある。具体的な例ではpreview
という名前でnpmスクリプトを作ると、それ自体は実行はできるが、prepreview
やpostpreview
が実行されない。
npmの実装を見ると、!cmd.match(/^(pre|post)/)
でチェックして、pre/postを実行するスクリプトのリストへ追加している。上記例だとpreview
はこの正規表現にマッチしないので、pre/postは追加されないわけだ。
Yarnの実装では見てくれる。とりあえずpre/postを付け、それらが見つかったら実行するスクリプトのリストへ追加するようになっているからだ。
npmスクリプトのランナーにもYarnを使うことにした。