node.js express node - Как развернуть узловое приложение, которое использует grunt для heroku




4 Answers

npm поддерживает шаг postinstall (среди многих других), который может быть именно тем, что вы ищете.

Node.js heroku buildpack запускает эту команду, когда вы нажимаете на герою для разрешения зависимостей сборки:

$ npm install --production

https://devcenter.heroku.com/articles/nodejs-support#build-behavior

Если вы посмотрите на документацию npm, вы можете настроить серию сценариев для запуска до или после того, как кто-либо запускает npm install для вашего пакета. Он настроен в свойстве scripts package.json . Свойство scripts позволяет запускать собственные скрипты (включая grunt ), когда некоторые вещи происходят в жизненном цикле пакета.

Например, чтобы отбросить текст и запустить команду grunt всякий раз, когда кто-то (включая Heroku) запускает npm install , добавьте это в свой package.json :

{
  ...
  "scripts": {
    "postinstall": "echo postinstall time; ./node_modules/grunt-cli/bin/grunt <your task name>"
  },
  ...
}

https://npmjs.org/doc/scripts.html

Важные оговорки:

  • Возможно, вам придется изменить путь к двоичному файлу grunt в сценарии postinstall , проверьте вывод ошибки, если команда grunt не выполняется.
  • grunt и grunt-cli должны быть указаны как dependency в вашем package.json поэтому он устанавливается Heroku. Листинг их в devDependencies недостаточно, так как Heroku не будет устанавливать их. Также обратите внимание, что Heroku не будет устанавливать его в качестве глобального пакета, поэтому для его выполнения на Heroku вам придется использовать относительный путь (как он настроен выше).

Если это не сработает (вам, вероятно, придется немного поиграть с относительными путями), тогда вы можете захотеть написать собственный собственный сборщик для Heroku .

Обновить

Начиная с 0,4, пакет grunt больше не содержит двоичный файл grunt , который теперь является частью пакета grunt-cli . Ответ был обновлен, чтобы отразить это.

example app

Я использую grunt, а также grunt плагины, такие как grunt-contrib-copy , grunt-contrib-mincss (которые перечислены как зависимости npm для моего приложения).

Также я не npm_modules папку npm_modules и npm_modules папку, где все сгенерированные файлы. И я не могу понять, как создать мое приложение (у меня есть команда grunt build ) после развертывания и настройки моего сервера (он уже ищет public папку).

Я видел некоторые вещи, такие как grunt-heroku-deploy , но мне кажется, что мне плохое предложение совершить до загрузки. Может быть, есть нежные решения ... Любые мысли?




Grunt (и др.) - инструмент построения, а не (действительно) то, что вы должны упаковывать и запускать на производстве. Другой подход заключался бы в том, чтобы использовать Grunt для подготовки проекта локально (или лучше на сервере CI), прежде чем только выталкивать встроенные файлы в Heroku. Как уже упоминалось, Heroku будет делать npm install на вашем приложении после того, как она будет нажата, что должно быть достаточно для того, чтобы, наконец, подготовить ваше приложение.

Я настроил его таким образом, чтобы полученное / построенное в Grunt приложение Heroku работало полностью отдельно от Git-репо до моего основного репозитория исходного кода приложения. Таким образом, когда я использую grunt deploy он оптимизирует и копирует соответствующие файлы в репозиторий Heroku, подбирает его ( git add -A и т. Д.), А затем git push heroku master (или что-то еще).

Это похоже на более чистое разделение проблем, если ваши серверы живут только за запуск готового пакета приложений.

Разумеется, YMMV, и принятый ответ выше, также полностью ... особенно в хорошо понимаемой и стабильной живой среде, такой как Heroku.




Чтобы получить эту работу с grunt 4.0, я выполнил следующие инструкции: https://discussion.heroku.com/t/grunt-on-heroku/98/2 . Единственное изменение, которое я должен был сделать, это удалить путь для хрюкания, поскольку использование стилей в стиле unix приведет к сбою в окнах и наоборот. К счастью, вам даже не нужно указывать путь, поскольку NPM будет искать хрюканье в папке node_modules / .bin https://npmjs.org/doc/scripts.html#path .

  1. убедитесь, что у вас есть как grunt, так и grunt-cli, установленные локально в вашем пакете. json, даже если grunt говорит вам установить cli глобально: $: npm i -S grunt grunt-cli

  2. добавьте шаг postinstall к вашему package.json, который выглядит так: "postinstall": "grunt prod"




Шаг ninstall postinstall, вероятно, является вашим лучшим вариантом, поскольку вы можете вызвать хрюканье оттуда. Но вы также должны проверить пользовательский buildpack, такой как heroku-buildpack-nodejs-grunt .




Related