13

我有一个托管在 Heroku 上的 Node.js 网站,我使用 git 进行部署。我使用了几个 node 模块,在 package.json 中引用;有没有办法阻止 Heroku 在我每次部署新版本的代码时“刷新”它们,只要 package.json 没有改变?

注意:这对于“本机”模块特别有用,其编译需要一些时间;对于 .js-only 模块,我成功地将它们从 package.json 中删除,并将它们的 node_modules/ 文件夹添加到 git repo 中。

4

4 回答 4

8

我是官方 Heroku Node.js Buildpack 的维护者。

我们有一个新版本的 beta 版本的 buildpack,它具有缓存支持,专为您上面描述的用例而设计。您可以在https://github.com/heroku/heroku-buildpack-nodejs/tree/diet#about-this-refactor阅读更多相关信息

最终这将成为 Heroku 上的默认 Node.js 构建包,但如果你现在想使用它,你需要显式设置 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
于 2013-11-04T23:40:24.687 回答
1

似乎 David Dollar 最近在heroku-buildpack-nodejs取得了进展。

简而言之:

heroku config:set BUILDPACK_URL=https://github.com/ddollar/heroku-buildpack-nodejs

在这里查看答案: https ://stackoverflow.com/a/18535675/1318839

于 2013-08-30T14:47:17.007 回答
0

您可以同时添加 .js 和本机 npm 包,并且仍然避免“刷新”,(至少是“刷新”的重新下载部分。)

将本机包包含到您的node_modules/目录中。当您部署到 Heroku 时, npm install将跳过包的下载。 npm rebuild也在运行。重新编译原生包需要一些时间,但它应该是可以忍受的,除非你有大量的原生包。

旁注Heroku 文档介绍了当您推送 nodejs 应用程序时 Heroku 所做的事情

旁注:之所以npm rebuild需要,是因为“节点升级后节点和本机代码模块之间可能会发生神秘的故障”。

于 2013-05-04T16:13:20.350 回答
0

克隆 Heroku node.js buildpack,并修改它以删除该rebuild命令。

该命令当前在此处运行: https ://github.com/heroku/heroku-buildpack-nodejs/blob/master/bin/compile#L180 ,但这势必会改变。

您可以通过修改以下命令以匹配您自己的 repo 来运行创建一个使用您自己的 buildpack 的应用程序:
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

于 2013-05-04T17:11:13.877 回答