2016-12-27 2 views
1

Я построил свой проект Angular 2 с помощью Angular 2 CLI и смог развернуть приложение на Heroku, используя этот tutorial.Трубопровод Heroku с угловыми 2 средами

Теперь я хотел бы создать конвейер для различных сред приложений (dev, staging, production и т. Д.).

В моем пакете.json У меня есть "postinstall": "ng build -prod", который создает производственную сборку моего кода, от которого заканчивается мое приложение. Есть ли способ, которым я мог бы изменить на основе CONFIG_VARS, что у меня было бы в моей установке Heroku? Например, он сказал бы "postinstall": "ng build -dev" для среды dev или "postinstall": "ng build -staging" для промежуточной среды. Или мне нужно будет настроить мой проект по-другому?

ответ

3

Короткий ответ: Нет, вам нужно будет сделать что-то другое.

Пояснение: Скрипт postfix для npm запускается, когда строится слип Heroku, когда вы делаете git-push для первого приложения Heroku в своем конвейере. Впоследствии, когда вы «продвигаете» релизы через ваш трубопровод Heroku (например, от «разработки» до «постановки» на «производство»), предварительно построенная пробка Heroku продвигается «как есть» и не перестраивается.

Следовательно, предположим, что у вас есть конфигурация var, установленная в вашем приложении «разработки», которое установит аргумент, который вы передадите «ng build» в «dev». Это означает, что когда вы нажмете на свое приложение «разработка», слизь будет построена с помощью опций «dev». Это нормально для приложения «разработки». ОДНАКО, когда вы впоследствии рекламируете «постановку» и «производство», вы будете продвигать заранее построенный слизень, который был построен с помощью опций «dev», который НЕ является тем, что вы хотите.

Итак, чтобы получить необходимую функциональность, вам нужно будет рассмотреть другой подход.

Один из способов сделать это - запустить скрипт «ng build» на фазе «npm prestart». Это должно работать и позволит вам использовать конфигурационные файлы Heroku для изменения вашего приложения Angular2 в зависимости от фазы конвейера Heroku, на которой они развернуты. Тем не менее, я обычно НЕ рекомендую этот подход. Это приведет к тому, что ваш «ng build» будет запускаться каждый раз, когда запускается «npm start», что довольно часто происходит на Heroku (т. Е. По крайней мере один раз каждые 24 часа или около того, плюс каждый раз, когда ваши револьверы Heroku перезапускаются по любой причине). Это приведет к тому, что ваше приложение будет испытывать больше времени простоя, чем необходимо. КАЖДЫЙ раз, когда перезагружаются ваши динозавры. Не очень хорошая идея, как правило.

Вместо этого лучше использовать приложение Angular2 для вашего сервера при его инициализации и вернуть серверу любые конкретные значения параметров конвейерной фазы, которые потребуются вашему приложению Angular2, на основе обычных конфигураций конфигурации Heroku.

+0

Благодарим вас за ответ. Поэтому, чтобы убедиться, что я правильно понимаю, я не смогу использовать среду, в которой Угловая CLI настроена для меня так, как предполагалось? – Dauzy

+0

Не так, как вы предложили в своем вопросе, нет. –

+0

Привет @YoniRabinovitch Я столкнулся с той же проблемой и спросил [вопрос] (https://stackoverflow.com/questions/46824209/firebase-angular-4-initialize-based-on-node-environment) о внедрении сервера запрос для среды в Angular 4, можете ли вы помочь – ishaqbhojani

0

Если запустить приложение в среде узла Heroku вы можете попытаться взглянуть на это решение, чтобы избежать ваших средах переменные и ключи безопасности жёстко прописанные в репозиториях: https://medium.com/@natchiketa/angular-cli-and-os-environment-variables-4cfa3b849659

я настоятельно рекомендую также принимать посмотрите на его первый ответ, в котором предлагается динамическое решение для создания файла среды во время построения: https://medium.com/@h_martos/amazing-job-sara-you-save-me-a-lot-of-time-thank-you-8703b628e3eb

Возможно, это не лучшие решения, но это трюк, чтобы не настраивать проекты по-разному каждый раз.

Смежные вопросы