Jak ustawić NODE_ENV = produkcję w systemie Windows?

340

W Ubuntu jest to dość proste; Mogę uruchomić aplikację za pomocą:

$ NODE_ENV=production node myapp/app.js

Nie działa to jednak w systemie Windows. Czy istnieje plik konfiguracyjny, w którym mogę ustawić atrybut?

Jacek
źródło
W przypadku rozwiązania wieloplatformowego można znaleźć odpowiedź stackoverflow.com/a/57509175/11127383
Daniel Danielecki

Odpowiedzi:

485

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).

Jani Hartikainen
źródło
112
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.

https://www.npmjs.com/package/cross-env

Pozwala napisać coś takiego:

cross-env NODE_ENV=production my-command

Co jest całkiem wygodne! Żadnych poleceń specyficznych dla systemu Windows lub Unix!

MoOx
źródło
25
Podczas gdy pierwsza odpowiedź jest prawdziwa. Myślę, że ta odpowiedź jest najbardziej wiarygodna i powinna zostać użyta
d4rklit3
To świetne rozwiązanie!
Kirill Gusyatin
Prosty i doskonale rozwiązuje mój problem. Byłem w stanie zbudować tylko na Linuksie. To rozwiązało zarówno system Linux, jak i Windows.
tista3
Ta odpowiedź zasługuje na więcej miłości, powinna być przyjęta :)
Honza Kalfus,
To także najlepsza odpowiedź dla mnie
knaos
166

W PowerShell:

$env:NODE_ENV="production"
jsalonen
źródło
4
ps: nie zapomnij o $ i cytatach;)
George
6
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:

  1. W wierszu poleceń:

    set NODE_ENV=production&&npm start

    lub

    set NODE_ENV=production&&node index.js
  2. 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.

    //package.json
    
    "scripts": {
      "start": "node index.js"
      "start_windows": "set NODE_ENV=production&&node index.js"
    }
Alexander Mills
źródło
1
Czy DEF chciałby wiedzieć, jak to zrobić?
SC_Chupacabra
2
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.

Z dokumentacji skryptu uruchomieniowego npm :

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.

Brieuc P.
źródło
3
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:

Właściwości projektu Visual Studio NTVS

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:

  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <DebugSymbols>true</DebugSymbols>
    <Environment>NODE_ENV=development</Environment>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <DebugSymbols>true</DebugSymbols>
    <Environment>NODE_ENV=production</Environment>
  </PropertyGroup>

Lista rozwijana „Debugowanie / wydanie” będzie wtedy kontrolować sposób ustawiania zmiennej przed uruchomieniem Node.js.

Paweł
źródło
12

Napisałem moduł win-node-env, za pomocą którego możesz uruchomić swoje polecenie tak jak w * nix.

NODE_ENV=production node myapp/app.js

Działa poprzez stworzenie NODE_ENV.cmd, które ustawia NODE_ENVzmienną ś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.

npm install -g win-node-env
laggingreflex
źródło
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.

Prosty test w Node.js:

console.log('process.env.NODE_ENV = ' + process.env.NODE_ENV);

Zwraca „niezdefiniowany” przy użyciu zestawu, a zwróci „programowanie” przy użyciu setx i ponownym uruchomieniu programu Visual Studio.

edhubbell
źródło
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.

Okno dialogowe systemu

Otworzy się okno dialogowe Zmienne środowiskowe.

Okno dialogowe Zmienna środowiskowa

Na dole, w obszarze Zmienne systemowe, wybierz Nowy ... Zostanie otwarte okno dialogowe Nowa zmienna systemowa.

wprowadź opis zdjęcia tutaj

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.

Mattatat-tat
źródło
2
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.js wydaje 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.

pstrawberriedev
źródło
6

Aby uruchomić aplikację w programie PowerShell (ponieważ &&jest niedozwolony):

($env:NODE_ENV="production") -and (node myapp/app.js)

Zauważ, że wyjście tekstowe tego, co robi serwer, jest tłumione i nie jestem pewien, czy można to naprawić. (Rozszerzenie odpowiedzi @ jsalonen.)

Cameron Yick
źródło
Nie działało to dla mnie:"debug-windows": "($env:NODE_ENV=\"dev\") -and (node src/dequeue.js)"
Evandro Pomatti
4

pierwszy w typie PowerShell

$env:NODE_ENV="production"

następnie wpisz

node fileName.js

Będzie działał idealnie, wyświetlając wszystkie wyjścia.

Abhinav
źródło
2

W przypadku wielu zmiennych środowiskowych .envplik jest wygodniejszy:

# .env.example, committed to repo
DB_HOST=localhost
DB_USER=root
DB_PASS=s1mpl3
# .env, private, .gitignore it
DB_HOST=real-hostname.example.com
DB_USER=real-user-name
DB_PASS=REAL_PASSWORD

Jest łatwy w użyciu dzięki dotenv-safe:

  1. Zainstaluj za pomocą npm install --save dotenv-safe.
  2. Dołącz go do swojego kodu (najlepiej na początku index.js) i bezpośrednio użyj z process.envpoleceniem :
require('dotenv').load()
console.log(process.env.DB_HOST)   

Nie zapomnij zignorować .envpliku w swoim VCS .

Twój program szybko zawiedzie, jeśli zmienna „zdefiniowana” w nie .env.examplejest ustawiona jako zmienna środowiskowa lub w .env.

Dominik
źródło
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"

Bozinowski
źródło
0

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.

npm install --production
Bar Horing
źródło
0

Użyłem skryptu npm do uruchomienia zadania gulp bez „&&”

NODE_ENV = testcases npm run seed-db

Mari Orlova
źródło
0

Zrestartuj kod VS, jeśli NODE_ENV lub dowolna inna zmienna środowiskowa nie podaje poprawnej wartości. Powinno to działać po ponownym uruchomieniu.

Rakesh Pahuja
źródło