2016-09-21 3 views
7

Ich versuche herauszufinden, wie ich die Umgebungsvariablen am besten in meine AngularJS-App laden kann. Ich verwende momentan Konstanten, die ihre Werte von denen im Webpack definePlugin definierten Werten übernehmen. Dies führt jedoch zu einem Problem mit Heroku, da der Code erstellt wird, wenn er in das Staging verschoben wird, und wenn er zur Produktion hochgestuft wird, wird er nicht neu erstellt. Daher sind die Webpack-Konstanten definePlugin die Staging-Umgebungsvariablen.Angular App auf Heroku mit Webpack - Environment-Variablen gebaut?

Ich habe untersucht, die Umgebungsvariablen von meiner API zur Laufzeit anfordern und dann als Konstanten in meinem Front-End verwendet werden, aber ich kann nicht herausfinden, wie Sie programmatisch außerhalb der ursprünglichen .constant(..) setzen Gelegenheit.

Wenn jemand andere bessere Praktiken zum Laden von Umgebungsvariablen in ein Front-End bei Verwendung von Webpack (und nicht von Grunt) kennt, lassen Sie es mich bitte wissen.

Antwort

1

Wenn Sie node.js (und npm) auf Ihrem Server verwenden, können Sie das Webpack im Script "npm prestart" anstelle von "npm postinstall" ausführen.

Auf diese Weise würde Webpack jedes Mal ausgeführt werden, wenn Ihre Heroku-Dynasys starten oder recyceln, und so Ihre env var-Definitionen aus der entsprechenden Heroku-Pipeline-Phase übernehmen. Wenn Ihre Staging-Dyna- nos gestartet werden, übernimmt webpack also Ihre Staging-env-var-Definitionen. Wenn Ihre Produktionsprüfungen gestartet werden, übernimmt webpack die vv-Definitionen für die Produktionsumgebung.

Der Nachteil dieses Ansatzes ist jedoch, dass die Zeit, in der Ihre Prüfstände während des Recyclings außer Betrieb sind, steigt, da sie das Webpack jetzt starten müssen, bevor sie starten.

+0

Würde dies auch passieren, wenn die App aus irgendeinem Grund zufällig neu gestartet werden würde? Dies ist eine sehr saubere Option, aber ich bin mir nicht sicher, wie gefährlich es ist. –

+0

Mit dieser Option würde Webpack jedes Mal ausgeführt werden, wenn npm start ausgeführt wird. Auf Heroku bedeutet das also jedes Mal, wenn die App recycelt oder aus einem anderen Grund neu gestartet wird (z. B. wenn Sie Umgebungsvariablen ändern, von einer Pipeline-App zu einer anderen propagieren usw.). –

+0

Wie bereits erwähnt, erhöht diese Lösung die Ausfallzeit Ihrer Prüfstände beim Recycling usw. Sie müssen sicherstellen, dass dies kein Problem für Ihre App darstellt. Es gibt natürlich Möglichkeiten, dies zu umgehen (siehe z. B. https://devcenter.heroku.com/articles/preboot), aber Sie müssen sich der Auswirkungen bewusst sein. –