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

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

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

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

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 " }, ... } 

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 . Ответ был обновлен, чтобы отразить это.

Похоже, что это будет в значительной степени решено, когда API-функции Heroku Platorm API и его release включены в магистраль. В этот момент вы можете создать свой код локально (или на сервере ci), упаковать его и отправить его в герою через вызов API и отпустить его оттуда.

Это все еще в бета-периоде и было объявлено только 19 декабря 2013 года.

https://devcenter.heroku.com/articles/platform-api-deploying-slugs

Я никогда не был очень доволен тем, сколько людей, похоже, было в порядке с проверкой вашего сгенерированного кода на git или NPM postinstall hook. 🙁

Плюс от философской позиции, делать сборку во время выпуска – это просто еще одна потенциальная ошибка.


Просто для удовольствия : так как это еще не завершено, вот скрипт bash, который я собрал вместе, вы можете использовать в настоящее время для создания своего кода в ветке развертывания, его фиксации, развертывания в heroku и последующего удаления ветви развертывания. (Я действительно не поклонник сценариев развертывания bash, поэтому я с нетерпением жду добавления API платформы)

 #!/bin/bash set -e # Delete current deploy branch git branch -D deploy # Create new deploy branch based on master git checkout -b deploy # Grunt comands to build our site grunt build:production # the dist/ directory is in my .gitignore, so forcibly add it git add -f dist/ git commit -m "Deploying to Heroku" # Push it up to heroku, the -f ensures that heroku won't complain git push heroku -f deploy:master # Switch it back to master git checkout master 

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

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

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

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

Heroku buildpack отлично работает для меня. Качественный товар.

Чтобы получить эту работу с grunt 4.0, я выполнил следующие инструкции: https://discussion.heroku.com/t/grunt-on-heroku/98/2 . Единственное изменение, которое я должен был сделать, это удалить путь для хрюкания, поскольку использование стилей в стиле unix приведет к сбою в windowsх и наоборот. К счастью, вам даже не нужно указывать путь, поскольку 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"

Ознакомьтесь с этим руководством: https://medium.com/p/c227cb1ddc56 . В нем объясняется, как можно развернуть приложение Grunt на Heroku с помощью настраиваемого buildpack.

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

Это сообщение специфично для Rails, но я не понимаю, почему вы не можете использовать его с какой-либо внутренней структурой и просто поменяйте Ruby buildpack тем, что вы используете.

Решение в основном заключается в использовании нескольких buildpacks, и у вас есть Node / Grunt buildpack для запуска grunt build для вас прямо на Heroku.

Важно отметить, что это решение не проверяет артефакты сборки в управлении версиями. (Ура!!!)

http://www.angularonrails.com/deploy-angular-rails-single-page-application-heroku/

  • Использование npm за корпоративным прокси .pac
  • ошибка получения: «Ошибка: ошибка SSL: SELF_SIGNED_CERT_IN_CHAIN» при использовании npm
  • Как я могу сделать несколько проектов совместно с каталогом node_modules?
  • npm install -g karma error MSB4019: импортированный проект «C: \ Microsoft.Cpp.Default.props» не найден
  • Ошибка: шаг «brew link» не завершился успешно
  • Есть ли способ автоматически создать файл package.json для проектов Node.js
  • npm install не работает
  • узел 5.5.0 уже установлен, но node -v выбирает «v4.2.1» на OS X и homebrew?
  • npm / yoman установить генератор-угловой без sudo
  • Как использовать пакет, установленный локально в node_modules?
  • Как переопределить вложенные версии зависимостей NPM?
  • Давайте будем гением компьютера.