我有一个在Heroku上托管的Node.js网站,我用git部署。 我使用了几个在package.json中引用的节点模块;有没有办法阻止Heroku每次部署新版本的代码时“刷新”它们,只要package.json没有改变?
注意:这对于“本机”模块特别有用,它们的编译需要一些时间;对于.js-only模块,我成功将它们从package.json中删除,并在git repo中添加了node_modules /文件夹。
答案 0 :(得分:5)
我是官方Heroku Node.js Buildpack的维护者。
我们有一个新版本的buildpack in beta,具有缓存支持,专门针对上述用例而设计。您可以在https://github.com/heroku/heroku-buildpack-nodejs/tree/diet#about-this-refactor
了解更多相关信息最终这将成为Heroku上的默认Node.js buildpack,但如果您现在想要使用它,则需要明确设置BUILPACK_URL配置变量:
heroku config:set BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-nodejs#diet -a my-node-app
git commit -am "fakeout" --allow-empty
git push heroku
答案 1 :(得分:1)
似乎David Dollar最近在heroku-buildpack-nodejs取得了进展。
简而言之:
heroku config:set BUILDPACK_URL=https://github.com/ddollar/heroku-buildpack-nodejs
答案 2 :(得分:0)
您可以添加.js和本机npm包,但仍然可以避免“刷新”,(至少是“刷新”的重新下载部分。)
将本机程序包包含在node_modules/
目录中。部署到Heroku时,npm install
将跳过下载程序包。 npm rebuild
也会运行。重新编译本机程序包需要一些时间,但除非你有大量的本机程序包,否则它应该是非常可忍受的。
Sidenote :Heroku doc on what Heroku does when you push a nodejs app。
旁注: npm rebuild
是必需的,因为“node and native code modules after a node upgrade”之间可能发生“神秘失败”。
答案 3 :(得分:0)
克隆Heroku node.js buildpack,并修改它以删除rebuild
命令。
该命令目前在此处运行: https://github.com/heroku/heroku-buildpack-nodejs/blob/master/bin/compile#L180,但这必将改变。
您可以通过修改以下命令来运行创建使用您自己的buildpack的应用程序,以匹配您自己的repo:
heroku create --buildpack http://github.com/heroku/heroku-buildpack-nodejs.git
或者使用以下内容更改现有应用的buildpack:
heroku config:add BUILDPACK_URL=git://github.com/heroku/heroku-buildpack-nodejs.git