Herokuでnpmのキャッシュにはまった
先週末Heroku + Node.jsではまったのでメモしておきます。
tl;dr
- npmのdependenciesにgitレポジトリを指定したらHerokuのキャッシュではまった
- heroku/heroku-repoいれたら快適Heroku生活できるようになった
npmのdependenciesにGitHubのレポジトリを指定する
npmを使う際、npmのレポジトリが古くGitHubのレポジトリを使いたい場面に遭遇しました。 調べたところnpmには直接GitHubのレポジトリを指定することができるらしいとのこと。
レポジトリURL/tarball/master
という書き方でうまく取り込めるようになりました。GitHubのレポジトリを取り込めるってことは、フォークして修正したレポジトリも使えるようになるので色々便利です。
Herokuでnode_modulesがキャッシュされる
npmのdependenciesにGitHubのフォークレポジトリを指定すると、GitHubのコミットがHerokuに反映されない問題に遭遇。
Heroku Node.js Support | Heroku Dev Center
Herokuはnode_modules
フォルダを.gitignore
に登録するとフォルダの中身をキャッシュするようになります。npmレポジトリのバージョンが上がったらキャッシュを更新します。しかし、npmにGitHubの固定URL(e.g. レポジトリURL/tarball/master
)を指定すると、バージョンに変更が無いとみなされキャッシュを使用し続けます。
node_modules
を無視しないようにしたらキャッシュされないようになりますが、それはちょっと気持ち悪くて嫌だなと。
一度npmのレポジトリ指定先を元に戻して再度指定し直してみましたが、ちゃんとキャッシュされていました/(^o^)\
Heroku-repoでキャッシュ消せるしリビルドできた
というわけでHerokuのキャッシュ問題を解決するレポジトリがこちら。
Herokuを操作するための便利コマンドを追加してくれるプラグインです。
purge_cache
$ heroku repo:purge_cache -a アプリ名
キャッシュ消せます
rebuild
$ heroku repo:rebuild -a アプリ名
一度リモートレポジトリを空にして、レポジトリをpushし直します。
以上のコマンドによってHerokuでのnpmキャッシュ問題はうまく解決できました。HerokuとNode使っている方は陥りがちな問題だと思うのですが、スマートな解決策があってよかったです。