npmの実装上の制限から、preやpostで始まる名前のnpmスクリプトを作っても想定したようには動かないことがある。具体的な例ではpreviewという名前でnpmスクリプトを作ると、それ自体は実行はできるが、prepreviewpostpreviewが実行されない。

npmの実装を見ると、!cmd.match(/^(pre|post)/)でチェックして、pre/postを実行するスクリプトのリストへ追加している。上記例だとpreviewはこの正規表現にマッチしないので、pre/postは追加されないわけだ。

Yarnの実装では見てくれる。とりあえずpre/postを付け、それらが見つかったら実行するスクリプトのリストへ追加するようになっているからだ。

npmスクリプトのランナーにもYarnを使うことにした。