Obecne wersje systemu Windows używają Powershell jako domyślnej powłoki, więc użyj:
$env:NODE_ENV="production"
Odpowiedź Per @ jsalonena poniżej. Jeśli jesteś w CMD (który nie jest już obsługiwany), użyj
set NODE_ENV=production
Należy to wykonać w wierszu polecenia, w którym zamierzasz uruchomić aplikację Node.js.
Powyższy wiersz ustawiłby zmienną środowiskową NODE_ENV dla wiersza polecenia, w którym wykonuje się polecenie.
Aby ustawić globalne zmienne środowiskowe tak, aby pozostawały poza pojedynczym wierszem poleceń, możesz znaleźć narzędzie z Systemu w Panelu sterowania (lub wpisując „środowisko” w polu wyszukiwania w menu Start).
Dla każdego, nadal zmaga się z tym: set NODE_ENV=production && node app. Więcej wygodnie skonfigurować package.jsonodpowiednio: "scripts": { "start": "set NODE_ENV=production && node app" }.
Amberlamps,
5
@ShuruiLiu polecenie nic nie wyświetli, ale możesz wpisać, echo %NODE_ENV%aby sprawdzić jego bieżącą wartość.
Jani Hartikainen
169
Uwaga: „set NODE_ENV = produkcja i&” dodaje spację do zmiennej. Potrzebowałem „ustaw NODE_ENV = produkcja i&”, aby uniknąć dodatkowej przestrzeni, która psuje aplikacje węzłowe, takie jak Ghost.
daw
12
@Amberlamps, co nie jest dobrym rozwiązaniem, ponieważ NODE_ENV jest wtedy zakodowany na stałe dla wszystkich maszyn; prawdziwym celem jest zmiana env przez maszynę za pomocą zmiennej env lub przekazanie wartości z wiersza poleceń, a nie zakodowanie jej na stałe w pliku package.json.
Alexander Mills
6
Myślę, że używanie cross-envjest lepszym rozwiązaniem tego problemu, jeśli Twój zespół pracuje na mieszanych systemach operacyjnych. Odpowiedź na @MoOx byłaby moim wyborem jako odpowiedź na to pytanie.
philk
230
Właśnie znalazłem fajny pakiet Node.js, który może bardzo pomóc w definiowaniu zmiennych środowiskowych przy użyciu unikalnej składni, wieloplatformowej.
set NODE_ENV=productionnie działało dla mnie w PowerShell, ale to działało. Dzięki!
gniew
6
Trochę starałem się, aby to działało z Powershell w Visual Studio Code. Myślałem, że zostawię tutaj rozwiązanie. Próbowałem uruchomić polecenie „Gulp”, upewniając się, że została ustawiona poprawna wartość env. To właśnie likwidacji pracuje dla mnie $env:NODE_ENV="development"; gulp runMytask. Zanotuj tam średnik. Plik gulp może korzystać z logiki warunkowej na process.env.NODE_ENV. O ile go nie ustawisz, nie zostanie zdefiniowane.
dvsoukup
2
Tylko to rozwiązanie działa dla mnie w systemie Windows 10 i pakiecie internetowym 3.8.1
Роман Арсеньев
1
To działa idealnie. Ale ta cross-env NODE_ENV=productionopcja jest naprawdę lepszym rozwiązaniem, jeśli uruchamia się polecenia npm z package.json, które wymagają ustawienia env. To zbyt proste, by pozostawić zestaw env na dev / prod po użyciu $ env: opcja NODE_ENV
Drenajów
105
Byłoby idealnie, gdybyś mógł ustawić parametry na tej samej linii, co Twoje wywołanie, aby uruchomić Node.js w systemie Windows. Spójrz dokładnie na poniższe i uruchom dokładnie tak, jak podano:
Masz dwie opcje:
W wierszu poleceń:
set NODE_ENV=production&&npm start
lub
set NODE_ENV=production&&node index.js
Sposób, aby działał w systemie Windows, polega na usunięciu białych znaków przed i po „&&”. Skonfigurowałeś plik package.json z okienkami start_windows (patrz poniżej) poniżej. Następnie uruchom „npm run start_windows” w wierszu polecenia.
Pracował dla mnie. Musiałem usunąć biały znak „ustaw NODE_ENV = production && nodemon server.js”
SC_Chupacabra
2
Żałuję, że nie przeczytałem tak daleko przed wypróbowaniem powyższej odpowiedzi, zaoszczędziłbym trochę czasu. : \
Jeff
1
Z niejasno powiązanej notatki stwierdziłem, że && nie działało zgodnie z oczekiwaniami w systemie Windows podczas łączenia wielu poleceń razem. W razie wątpliwości spróbuj użyć | zamiast tego
Mike
1
działało to dla mnie na Windows 10 64-bitowej maszynie z cmd i power-shell
Ani
30
Możesz użyć
npm run env NODE_ENV=production
Jest to prawdopodobnie najlepszy sposób, aby to zrobić, ponieważ jest kompatybilny zarówno z Windows, jak i Unixem.
Skrypt env to specjalne wbudowane polecenie, którego można użyć do wyświetlenia zmiennych środowiskowych, które będą dostępne dla skryptu w czasie wykonywania. Jeśli w pakiecie zdefiniowano polecenie „env”, będzie ono miało pierwszeństwo przed wbudowanym.
Jak możemy wykonać inne polecenie z zestawem zmiennych? To nie działa: npm run env NODE_ENV = produkcja && echo $ NODE_ENV. Prawdopodobnie są one wykonywane w dwóch różnych powłokach?
Jonas Kello
1
Z tego co widzę, to wcale nie działa. Z samych dokumentów to tylko lista zmiennych środowiskowych, a nie ich ustawianie.
kumarharsh
2
Nie działa dla mnie. Wyświetla listę zmiennych, pokazuje zmienną, którą określisz, ale w środowisku wykonawczym zmienna nie jest
poprawna w procesie. Na.YOUR_VAR
3
@JonasKello Użyłbyś tego: npm run env NODE_ENV=production -- node -e 'console.log(process.env.NODE_ENV)'Jest --to obowiązkowe . Zamień na node -e 'console.log(process.env.NODE_ENV)'dowolne polecenie.
Pauan,
Próbowałem tego z tym poleceniem: npm run env NODE_TLS_REJECT_UNAUTHORIZED=0 -- node --inspect ./etc/http-req-standalone.jsi ... nic się nie stało. Nie jestem pewien, czy ta metoda działa w systemie Windows.
jcollum,
14
Jeśli korzystasz z Visual Studio z NTVS, możesz ustawić zmienne środowiskowe na stronie właściwości projektu:
Jak widać, listy rozwijane Konfiguracja i Platforma są wyłączone (nie sprawdziłem zbyt daleko, dlaczego tak jest), ale jeśli edytujesz swój .njsprojplik w następujący sposób:
dokładnie to, czego szukałem! do uruchamiania ze skryptami npm, a nawet działa z innymi narzędziami cli węzła, takimi jak jest. Więc „ustaw NODE_ENV = debugowanie i cls i jest ...” zmieniło się w „cls i NODE_ENV = debugowanie jest”
Z. Khullah
9
Moje doświadczenie w korzystaniu z Node.js w systemie Windows 7 64-bit w Visual Studio 2013 jest takie, że musisz go używać
setx NODE_ENV development
z okna cmd. ORAZ musisz ponownie uruchomić program Visual Studio, aby nowa wartość została rozpoznana.
Składnia zestawu trwa tylko przez czas okna cmd, w którym jest ustawiona.
cmd- nie PowerShell? Ugh, chodź na okna, zbierz to razem.
jcollum
Twoja uwaga na temat ponownego uruchomienia kodu VS była naprawdę przydatna!
Yury Kozlov
8
Oto metoda bez wiersza poleceń:
W Windows 7 lub 10 wpisz environment w polu wyszukiwania menu Start i wybierz Edytuj systemowe zmienne środowiskowe.
Alternatywnie przejdź do Panelu sterowania \ System i zabezpieczenia \ System i kliknij Zaawansowane ustawienia systemu
Powinno to otworzyć okno dialogowe Właściwości systemu z wybraną kartą Zaawansowane. Na dole zobaczysz przycisk Zmienne środowiskowe ... Kliknij to.
Otworzy się okno dialogowe Zmienne środowiskowe.
Na dole, w obszarze Zmienne systemowe, wybierz Nowy ... Zostanie otwarte okno dialogowe Nowa zmienna systemowa.
Wprowadź nazwę i wartość zmiennej, a następnie kliknij OK.
Musisz zamknąć wszystkie monity cmd i zrestartować serwer, aby nowa zmienna była dostępna do przetworzenia. Env. Jeśli nadal się nie wyświetla, uruchom ponownie komputer.
Dziękuję Ci! Zrobiłem to wszystko, ale działało to dopiero po ponownym uruchomieniu serwera.
Marcel Lamothe
7
Tylko dla wyjaśnienia i dla każdego, kto może wyciągać włosy ...
Jeśli używasz git bash w systemie Windows , set node_env=production&& node whatever.jswydaje się , że nie działa . Zamiast tego użyj natywnego polecenia cmd. Następnie przy użyciu set node_env=production&& node whatever.jsdziała zgodnie z oczekiwaniami.
Mój przypadek użycia:
Programuję w systemie Windows, ponieważ mój przepływ pracy jest znacznie szybszy, ale musiałem się upewnić, że oprogramowanie pośrednie właściwe dla mojej aplikacji nie uruchamia się w środowisku produkcyjnym.
Pliki .env są przydatne tylko dla sekretów i dodają dodatkowy krok złożoności podczas konfigurowania podczas przypisywania nowych osób do projektu lub wprowadzania do nich zmian.
coiso
@coiso Bez ogólnego, wspólnego miejsca, gdzie umieszczasz wiele zmiennych env? Albo w pliku skryptu, albo w ustawieniu zależnym od IDE, jesteś jeszcze bardziej związany z konkretnymi narzędziami. Myślę, że to sprawia, że integracja nowych członków zespołu jest jeszcze trudniejsza.
Dominik
2
Jeśli używasz terminala GITBASH
"set NODE_ENV=production"
nie będzie działać, możesz wpisać „eksportuj”NODE_ENV=production"
to nie ustawi zmiennej, ale jest przydatne w wielu przypadkach. Nie polecam używania tego do produkcji, ale powinno być w porządku, jeśli bawisz się z npm.
Odpowiedzi:
Obecne wersje systemu Windows używają Powershell jako domyślnej powłoki, więc użyj:
Odpowiedź Per @ jsalonena poniżej. Jeśli jesteś w CMD (który nie jest już obsługiwany), użyj
Należy to wykonać w wierszu polecenia, w którym zamierzasz uruchomić aplikację Node.js.
Powyższy wiersz ustawiłby zmienną środowiskową NODE_ENV dla wiersza polecenia, w którym wykonuje się polecenie.
Aby ustawić globalne zmienne środowiskowe tak, aby pozostawały poza pojedynczym wierszem poleceń, możesz znaleźć narzędzie z Systemu w Panelu sterowania (lub wpisując „środowisko” w polu wyszukiwania w menu Start).
źródło
set NODE_ENV=production && node app
. Więcej wygodnie skonfigurowaćpackage.json
odpowiednio:"scripts": { "start": "set NODE_ENV=production && node app" }
.echo %NODE_ENV%
aby sprawdzić jego bieżącą wartość.cross-env
jest lepszym rozwiązaniem tego problemu, jeśli Twój zespół pracuje na mieszanych systemach operacyjnych. Odpowiedź na @MoOx byłaby moim wyborem jako odpowiedź na to pytanie.Właśnie znalazłem fajny pakiet Node.js, który może bardzo pomóc w definiowaniu zmiennych środowiskowych przy użyciu unikalnej składni, wieloplatformowej.
https://www.npmjs.com/package/cross-env
Pozwala napisać coś takiego:
Co jest całkiem wygodne! Żadnych poleceń specyficznych dla systemu Windows lub Unix!
źródło
W PowerShell:
źródło
set NODE_ENV=production
nie działało dla mnie w PowerShell, ale to działało. Dzięki!$env:NODE_ENV="development"; gulp runMytask
. Zanotuj tam średnik. Plik gulp może korzystać z logiki warunkowej na process.env.NODE_ENV. O ile go nie ustawisz, nie zostanie zdefiniowane.cross-env NODE_ENV=production
opcja jest naprawdę lepszym rozwiązaniem, jeśli uruchamia się polecenia npm z package.json, które wymagają ustawienia env. To zbyt proste, by pozostawić zestaw env na dev / prod po użyciu $ env: opcja NODE_ENVByłoby idealnie, gdybyś mógł ustawić parametry na tej samej linii, co Twoje wywołanie, aby uruchomić Node.js w systemie Windows. Spójrz dokładnie na poniższe i uruchom dokładnie tak, jak podano:
Masz dwie opcje:
W wierszu poleceń:
lub
Sposób, aby działał w systemie Windows, polega na usunięciu białych znaków przed i po „&&”. Skonfigurowałeś plik package.json z okienkami start_windows (patrz poniżej) poniżej. Następnie uruchom „npm run start_windows” w wierszu polecenia.
źródło
Możesz użyć
Jest to prawdopodobnie najlepszy sposób, aby to zrobić, ponieważ jest kompatybilny zarówno z Windows, jak i Unixem.
Z dokumentacji skryptu uruchomieniowego npm :
źródło
npm run env NODE_ENV=production -- node -e 'console.log(process.env.NODE_ENV)'
Jest--
to obowiązkowe . Zamień nanode -e 'console.log(process.env.NODE_ENV)'
dowolne polecenie.npm run env NODE_TLS_REJECT_UNAUTHORIZED=0 -- node --inspect ./etc/http-req-standalone.js
i ... nic się nie stało. Nie jestem pewien, czy ta metoda działa w systemie Windows.Jeśli korzystasz z Visual Studio z NTVS, możesz ustawić zmienne środowiskowe na stronie właściwości projektu:
Jak widać, listy rozwijane Konfiguracja i Platforma są wyłączone (nie sprawdziłem zbyt daleko, dlaczego tak jest), ale jeśli edytujesz swój
.njsproj
plik w następujący sposób:Lista rozwijana „Debugowanie / wydanie” będzie wtedy kontrolować sposób ustawiania zmiennej przed uruchomieniem Node.js.
źródło
Napisałem moduł win-node-env, za pomocą którego możesz uruchomić swoje polecenie tak jak w * nix.
Działa poprzez stworzenie
NODE_ENV.cmd
, które ustawiaNODE_ENV
zmienną środowiskową i spawns procesu dziecko z resztą polecenia i jego argumentami.Wystarczy zainstalować (globalnie) i uruchomić polecenia skryptu npm, powinno to automatycznie sprawić, by działały.
źródło
Moje doświadczenie w korzystaniu z Node.js w systemie Windows 7 64-bit w Visual Studio 2013 jest takie, że musisz go używać
z okna cmd. ORAZ musisz ponownie uruchomić program Visual Studio, aby nowa wartość została rozpoznana.
Składnia zestawu trwa tylko przez czas okna cmd, w którym jest ustawiona.
Prosty test w Node.js:
Zwraca „niezdefiniowany” przy użyciu zestawu, a zwróci „programowanie” przy użyciu setx i ponownym uruchomieniu programu Visual Studio.
źródło
cmd
- nie PowerShell? Ugh, chodź na okna, zbierz to razem.Oto metoda bez wiersza poleceń:
W Windows 7 lub 10 wpisz environment w polu wyszukiwania menu Start i wybierz Edytuj systemowe zmienne środowiskowe.
Alternatywnie przejdź do Panelu sterowania \ System i zabezpieczenia \ System i kliknij Zaawansowane ustawienia systemu
Powinno to otworzyć okno dialogowe Właściwości systemu z wybraną kartą Zaawansowane. Na dole zobaczysz przycisk Zmienne środowiskowe ... Kliknij to.
Otworzy się okno dialogowe Zmienne środowiskowe.
Na dole, w obszarze Zmienne systemowe, wybierz Nowy ... Zostanie otwarte okno dialogowe Nowa zmienna systemowa.
Wprowadź nazwę i wartość zmiennej, a następnie kliknij OK.
Musisz zamknąć wszystkie monity cmd i zrestartować serwer, aby nowa zmienna była dostępna do przetworzenia. Env. Jeśli nadal się nie wyświetla, uruchom ponownie komputer.
źródło
Tylko dla wyjaśnienia i dla każdego, kto może wyciągać włosy ...
Jeśli używasz git bash w systemie Windows ,
set node_env=production&& node whatever.js
wydaje się , że nie działa . Zamiast tego użyj natywnego polecenia cmd. Następnie przy użyciuset node_env=production&& node whatever.js
działa zgodnie z oczekiwaniami.Mój przypadek użycia:
Programuję w systemie Windows, ponieważ mój przepływ pracy jest znacznie szybszy, ale musiałem się upewnić, że oprogramowanie pośrednie właściwe dla mojej aplikacji nie uruchamia się w środowisku produkcyjnym.
źródło
Aby uruchomić aplikację w programie PowerShell (ponieważ
&&
jest niedozwolony):Zauważ, że wyjście tekstowe tego, co robi serwer, jest tłumione i nie jestem pewien, czy można to naprawić. (Rozszerzenie odpowiedzi @ jsalonen.)
źródło
"debug-windows": "($env:NODE_ENV=\"dev\") -and (node src/dequeue.js)"
pierwszy w typie PowerShell
następnie wpisz
Będzie działał idealnie, wyświetlając wszystkie wyjścia.
źródło
W przypadku wielu zmiennych środowiskowych
.env
plik jest wygodniejszy:Jest łatwy w użyciu dzięki
dotenv-safe
:npm install --save dotenv-safe
.index.js
) i bezpośrednio użyj zprocess.env
poleceniem :Nie zapomnij zignorować
.env
pliku w swoim VCS .Twój program szybko zawiedzie, jeśli zmienna „zdefiniowana” w nie
.env.example
jest ustawiona jako zmienna środowiskowa lub w.env
.źródło
Jeśli używasz terminala GITBASH
"set NODE_ENV=production"
nie będzie działać, możesz wpisać „eksportuj”NODE_ENV=production"
źródło
to nie ustawi zmiennej, ale jest przydatne w wielu przypadkach. Nie polecam używania tego do produkcji, ale powinno być w porządku, jeśli bawisz się z npm.
źródło
Użyłem skryptu npm do uruchomienia zadania gulp bez „&&”
NODE_ENV = testcases npm run seed-db
źródło
Zrestartuj kod VS, jeśli NODE_ENV lub dowolna inna zmienna środowiskowa nie podaje poprawnej wartości. Powinno to działać po ponownym uruchomieniu.
źródło