Избегайте обновления 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