2017-02-17 13 views
9

Używam serwera kompilacji do budowania moich projektów Vue, używając polecenia npm run build ładnie dostarczonego przez szablon Vue 2. Szablon Vue zapewnia także dostęp do danych specyficznych dla środowiska, które można skonfigurować w plikach znajdujących się pod katalogiem config. Rzeczy takie jak prod.env.js, itp. Następnie dostęp do tych danych poprzez process.env.API_PREFIX, jak widać w instrukcji szablonu.Kompilacja niezależna od środowiska za pomocą szablonu Webue Vue

Chcę móc raz zbudować kod, a następnie wdrożyć tę samą kompilację (zdefiniowaną przez wyjście w Dist) do wielu serwerów, ale różne serwery mają inną konfigurację (różne API_PREFIX itd.). Obecnie referencje process.env są rozszerzane w czasie kompilacji przez kompilator Webpack. Dlatego muszę odbudować dla każdego środowiska.

Mogę wymyślić kilka sposobów na zrobienie tego - oczywiście ładowanie konfiguracji musi nastąpić w czasie wykonywania, a biorąc pod uwagę, że działa w przeglądarce i musi odwoływać się do jakiegoś pliku, to musiałoby przejść przez żądanie AJAX dotyczące statycznej konfiguracji JSON obsługiwane przez serwer WWW osobno lub podobne. Ale chciałbym wiedzieć, jak ktokolwiek tutaj poradziłby sobie z tym wymogiem.

+1

Istnieje kilka trików, ale potrzebujemy więcej informacji o tym, jak określić API_PREFIX. Czy jest to powiązane z domeną, w której aplikacja będzie dostępna? Czy możesz podać konkretne przykłady? – aristidesfl

+0

Tak, prefiks API jest przykładem danych konfiguracyjnych, które są specyficzne dla każdego środowiska. Byłaby to inna domena dla każdego środowiska wdrażania. Na przykład w kompilacji dla środowiska wdrażania "przemieszczanie" prefiks API może mieć postać 'https: // staging-api.mycompany.com'. [Zasadniczo nie można go jednak wyprowadzić z nazwy środowiska.] – amoe

Odpowiedz

2

Bez znajomości specyficznej architektury trudno jest udzielić konkretnych porad. Zamiast tego zostawię kilka ogólnych pomysłów.

Aby zrobić to, co chcesz w rozsądny sposób, prawdopodobnie będziesz musiał wyprowadzić prefiks z domeny, w której obsługujesz interfejs.

Istnieje kilka rzeczy, które można wykorzystać do tego, oprócz korzystania window.location przy starcie:

Nawet jeśli to nie rozwiąże Twój konkretny przypadek, nadzieja daje wyobrażenie o tym, co jest dostępne.

+0

Moje pytanie nie dotyczy tak naprawdę prefiksu API, który jest tylko przypadkowym przykładem części konfiguracji, którą chcę sparametryzować po procesie kompilacji. Mam wiele innych rzeczy, które są specyficzne dla środowiska wdrażania, które nie są związane z prefiksem. Potrzebuję ogólnego sposobu na odczyt zmiennych konfiguracyjnych w czasie wykonywania. – amoe

+1

Pytanie, gdzie, kiedy i jak chcesz je zapisać. Na podstawie jakich kryteriów. Bez bardziej szczegółowego opisu zastosowania, trudno podać bardziej konkretne pomysły. – aristidesfl

+0

Myślę, że postanowiłem zrobić to za pomocą zewnętrznych programów Webpack, globalnego znacznika skryptu i pliku w katalogu "static", który definiuje konfigurację w obiekcie 'window'. Jest on oceniany w czasie wykonywania, ale nadal jest wprowadzany do kontekstu pakietu Web Pack w sposób, który wydaje się synchroniczny. – amoe

Powiązane problemy