Избегайте обновления npm после каждого развертывания на Heroku

У меня есть веб-сайт Node.js, размещенный на Heroku, который я развертываю с помощью git. Я использую несколько модулей node, упомянутых в package.json; есть ли способ помешать Heroku обновлять их каждый раз, когда я развертываю новую версию кода, если package.json не изменился?

Примечание: это было бы особенно полезно для "родных" модулей, компиляция которых занимает немного времени; для .js-only модулей, я успешно удалил их из package.json и добавил их папку node_modules/в репозиторий git.

Ответ 1

Я поддерживаю официальный Heroku Node.js Buildpack.

У нас есть новая версия buildpack в бета-версии, в которой реализована поддержка кеширования, разработанная специально для описанного выше варианта использования. Подробнее об этом можно узнать на https://github.com/heroku/heroku-buildpack-nodejs/tree/diet#about-this-refactor

В конце концов это станет стандартным Node.js buildpack на Heroku, но если вы хотите использовать его сейчас, вам нужно явно указать BUILPACK_URL config var:

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

Ответ 2

Похоже, что в последнее время Дэвид Доллар продвинулся в heroku-buildpack-nodejs.

Короче:

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

См. ответ здесь: fooobar.com/questions/530282/...

Ответ 3

Вы можете добавить как .js, так и собственные пакеты npm и все равно избегать "обновления" (по крайней мере, часть повторной загрузки "refresh".)

Включите собственные пакеты в каталог node_modules/. Когда вы развертываете в Heroku, npm install пропустит загрузку пакета. npm rebuild также запускается. Это займет некоторое время, чтобы перекомпилировать собственные пакеты, но это должно быть очень терпимо, если у вас нет тонны собственных пакетов.

Sidenote: Документ Heroku о том, что делает Heroku, когда вы нажимаете приложение nodejs.

Sidenote: требуется npm rebuild, потому что там есть таинственные сбои, которые могут произойти между node и встроенными модулями кода после node upgrade".

Ответ 4

Скройте файл Heroku node.js и измените его, чтобы удалить команду rebuild.

В настоящее время выполняется команда: https://github.com/heroku/heroku-buildpack-nodejs/blob/master/bin/compile#L180, но это обязательно изменится.

Вы можете запустить создание приложения, которое использует собственный 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