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?
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?
Odpowiedzi:
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).
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:
cross-env NODE_ENV=production my-command
Co jest całkiem wygodne! Żadnych poleceń specyficznych dla systemu Windows lub Unix!
W PowerShell:
$env:NODE_ENV="production"
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_ENV
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.
//package.json
"scripts": {
"start": "node index.js"
"start_windows": "set NODE_ENV=production&&node index.js"
}
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.
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.
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:
<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.
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_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.
npm install -g win-node-env
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.
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.
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.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.
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.)
"debug-windows": "($env:NODE_ENV=\"dev\") -and (node src/dequeue.js)"
W przypadku wielu zmiennych środowiskowych .env
plik 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
:
npm install --save dotenv-safe
.index.js
) i bezpośrednio użyj z process.env
poleceniem :require('dotenv').load()
console.log(process.env.DB_HOST)
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
.
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.
npm install --production
Użyłem skryptu npm do uruchomienia zadania gulp bez „&&”
NODE_ENV = testcases npm run seed-db
Zrestartuj kod VS, jeśli NODE_ENV lub dowolna inna zmienna środowiskowa nie podaje poprawnej wartości. Powinno to działać po ponownym uruchomieniu.