Jak ustawić NODE_ENV na produkcję / rozwój w OS X


Odpowiedzi:


663

Przed uruchomieniem aplikacji możesz to zrobić w konsoli,

export NODE_ENV=production

Lub jeśli jesteś w systemie Windows, możesz spróbować tego:

SET NODE_ENV=production

lub możesz uruchomić swoją aplikację w ten sposób:

NODE_ENV=production node app.js

Możesz również ustawić go w swoim pliku js:

process.env.NODE_ENV = 'production';

Ale nie sugeruję robić tego w pliku środowiska wykonawczego, ponieważ nie jest łatwo otworzyć VIM na serwerze i zmienić go na produkcyjny. Możesz utworzyć plik config.json w swoim katalogu i za każdym razem, gdy aplikacja uruchomi się, odczyta z niego i ustawi konfigurację.


12
To zła rada. Będzie to trudne, process.env.NODE_ENVniezawodne ustawienie z poziomu samej aplikacji. Najlepiej ustaw poprawnie zmienną środowiskową, tak jak Daniel poniżej.
— MK Safi

15
Jestem fanem ustawiania NODE_ENVjawnie przy każdym uruchomieniu aplikacji, jak w drugim przykładzie ( NODE_ENV=production node app.js). W ten sposób potencjalnie uratujesz się przed przyszłym pociąganiem za włosy w przypadku, gdy zapomnisz NODE_ENVprzywrócić lokalnemu development.
— Jon

Wcale nie tak genialne. Za każdym razem, gdy uruchamiasz aplikację, musisz dodawać tę zmienną env. To jest do bani. Poniżej zamieszczono lepsze rozwiązanie.
— Lukas Liesis

2
Patrz npmjs.com/package/cross-env prostego rozwiązania cross-platformowej. cross-env NODE_ENV=productiondziała na systemach Windows i Linux / Mac.
— AntonB

1
@Gleb NODE_ENV=production forever app.jspowinien działać.
— Farid Nouri Neshat,

102

w pakiecie.json:

{
  ...
  "scripts": {
    "start": "NODE_ENV=production node ./app"
  }
  ...
}

następnie uruchom w terminalu:

npm start

1
nie zaczynaj umieszczać wielu skryptów w pakiecie.json, to zła praktyka, ponieważ wprowadzasz niespójności i zabija to niezmienność w twoich projektach. Wiem, że wiele osób tworzy skrypty uruchamiające chrząkanie lub przełykanie, ale nie rób tego
— PositiveGuy

38
@WeDoTDD o czym mówisz? Skrypty te powinny być używane podobnie do makefile. Użycie go jako tego przykładu lub jak już wspomniałeś do uruchomienia gulp jest całkowicie rozsądnym przypadkiem użycia. W przypadku prostych zadań nie używam teraz nawet gulp i robię to wszystko w skrypcie, znacznie szybciej jest działać, i pozwalam webpackowi wykonywać pracę, którą kiedyś robił gulp.
— Marko Grešak,

15
@WTF - Co to znaczy, że używanie skryptów w pakiecie.json to „zła praktyka”? Taki jest punkt skryptu: sekcja, aby umieścić skrypty! Jest całkowicie poprawny i eliminuje potrzebę przełykania lub chrząkania. Wszystko to odbywa się za pomocą polecenia i pakietu internetowego.
— TetraDev,

6
@WTF Korzystanie ze skryptów w rzeczywistości znacznie poprawia spójność. Możesz skonfigurować standardowy zestaw poleceń, które będą używane w wielu projektach, które mogą nie używać tych samych podstawowych skryptów kompilacji, bibliotek itp. Możesz przynajmniej spróbować poprzeć swój punkt widzenia faktami i przykładami.
— Lewis Diamond,

4
Wstawienie NODE_ENV=productionpliku package.json nie ma większego sensu. Uruchomienie npm startw fazie rozwojowej spowoduje uruchomienie go w produkcji. Możesz napisać kod tak, jakby zawsze był produkcyjny, ponieważ zawsze uruchamiasz go w ten sposób. Jedynym powodem, dla którego to robię, byłoby wymuszenie działania innych modułów (np. Express) w trybie produkcyjnym. Po co w ogóle używać zmiennych środowiskowych, jeśli nigdy się nie zmieniają?
— Nateowami

66

Nikogo .envtu jeszcze nie wymieniono ? Utwórz .envplik w katalogu głównym aplikacji, a następnie require('dotenv').config()przeczytaj wartości. Łatwo zmieniany, łatwy do odczytu, wieloplatformowy.

https://www.npmjs.com/package/dotenv


1
Dziwne, nikt o tym nie wspomina, moim zdaniem najlepsze rozwiązanie. Umieść nazwę środowiska w tym samym pliku z resztą zmiennych.
— Asinus Rex

2
Ustawienie NODE_ENV w pliku .env nie będzie działać. Zobacz to: github.com/motdotla/dotenv/issues/328
— Michael

U mnie ustawienie "mode": "production"w .envpliku działało.
— DarkLite1

46

export NODE_ENV=production jest złym rozwiązaniem, znika po ponownym uruchomieniu.

jeśli nie chcesz się już martwić tą zmienną - dodaj ją do tego pliku:

/etc/environment

nie używaj składni eksportu, po prostu napisz (w nowym wierszu, jeśli jakaś zawartość już tam jest):

NODE_ENV=production

działa po ponownym uruchomieniu. Nie będziesz musiał ponownie wprowadzać komendy export NODE_ENV = produkcyjnej w dowolnym miejscu i po prostu użyj węzła z czymkolwiek chcesz - na zawsze, pm2 ...

Dla heroku:

heroku config:set NODE_ENV="production"

co jest tak naprawdę domyślne.


2
Koszmar utrzymania. Co ze skrzynką, w której nie masz uprawnień do / etc?
— Thomas McCabe

1
Osobiście używam NODE_ENV=production gulp bundle-production-appdo spakowania gotowego skryptu produkcyjnego, na serwerze NODE_ENV znajduje się w środowisku serwera, a na komputerze dewelopera go nie ma. W niektórych maszynach koszmar, jeśli nie jest ustawiony, i oczekujesz, że będzie zawsze ustawiony . W niektórych oczekujesz, że go nie będziesz, więc nie dodajesz. W każdym razie, robiąc interfejsy, wyjaśniam, czy jest w trybie programowania, więc nigdy nie masz pytania, czy jest włączony, czy wyłączony. Jeśli NODE_ENV jest! == produkcja, to w twojej twarzy znajdujesz się w innym trybie, więc nie ma koszmaru. Wszystko jasne, wszystko dobrze.
— Lukas Liesis

+1 za rozmowę o tym, jak go utrzymać. Zastanawiam się, ile osób ustawiło to tylko w bieżącej sesji, myśląc, że będzie się utrzymywać. A co przed ponownym uruchomieniem? Jeśli chcesz go ustawić od razu, powinieneś go zainstalować /etc/environment i uruchomić export NODE_ENV=production?
— Nateowami

23

Aby nie martwić się, czy uruchamiasz skrypty w systemie Windows, Mac lub Linux, zainstaluj pakiet cross-env . Następnie możesz łatwo używać swoich skryptów, tak jak:

"scripts": {
    "start-dev": "cross-env NODE_ENV=development nodemon --exec babel-node -- src/index.js",
    "start-prod": "cross-env NODE_ENV=production nodemon --exec babel-node -- src/index.js"
}

Ogromne rekwizyty dla twórców tego pakietu.

npm install --save-dev cross-env

22
heroku config:set NODE_ENV="production"

2
ahhh właśnie tego potrzebowałem. jesteś niesamowity
— Connor Leech

5
NODE_ENV=productionjest teraz domyślny we wdrożeniach Heroku node.js.
— Sean

1
Heroku nie jest jedynym miejscem do wdrożenia
— Pavan Katepalli

9

W przypadku programu Windows Powershell użyj tego polecenia

$env:NODE_ENV="production" ; node app.js

6

W OSX polecam dodanie export NODE_ENV=developmentdo twojego ~/.bash_profilei / lub ~/.bashrci / lub~/.profile .

Osobiście dodaję ten wpis do mojego, ~/.bashrca następnie mam~/.bash_profile ~/.profile importuję zawartość tego pliku, dzięki czemu jest spójny w różnych środowiskach.

Po dodaniu tych dodatków uruchom ponownie terminal, aby wybrać ustawienia.


2

Jeśli korzystasz z systemu Windows. Najpierw otwórz cmd w prawym folderze

set node_env={your env name here}

naciśnij Enter, możesz zacząć od węzła

node app.js

zacznie się od ustawienia env


1
czy nie zniknie po ponownym uruchomieniu? Nie mam okien, nie mogę spróbować.
— Lukas Liesis

Jeśli pytasz o restart węzła nie, nie zniknie, dopóki nie zamkniesz wiersza polecenia. Ale jeśli system Windows Server uruchomi się ponownie, zniknie.
— garenyondem

2
mówiąc o ponownym uruchomieniu systemu operacyjnego. Dlatego lepiej znaleźć inny sposób, aby przestać się zastanawiać za każdym razem, gdy instalowane są aktualizacje systemu Windows lub po prostu restartować, na temat tego problemu.
— Lukas Liesis

2

Jeśli używasz webpacka w swojej aplikacji, możesz po prostu go tam ustawić, używając DefinePlugin...

Więc w swojej pluginsekcji ustaw NODE_ENV na production:

plugins: [
  new webpack.DefinePlugin({
    'process.env.NODE_ENV': '"production"',
  })
]

1

Aby mieć wiele środowisk, potrzebujesz wcześniej wszystkich odpowiedzi (parametr NODE_ENV i wyeksportuj go), ale używam bardzo prostego podejścia bez potrzeby instalowania czegokolwiek. W pliku package.json umieść skrypt dla każdej potrzebnej env, na przykład:

...
"scripts": {
    "start-dev": "export NODE_ENV=dev && ts-node-dev --respawn --transpileOnly ./src/app.ts",
    "start-prod": "export NODE_ENV=prod && ts-node-dev --respawn --transpileOnly ./src/app.ts"
  }
 ...

Następnie, aby uruchomić aplikację zamiast npm startkorzystania z niejnpm run script-prod .

W kodzie możesz uzyskać dostęp do bieżącego środowiska za pomocą process.env.NODE_ENV .

Voila


NODE_ENV powinien być albo „programowaniem”, albo „produkcją”, powyższe nie jest rozpoznawane przez kod innej firmy (chociaż możesz na to patrzeć w process.env)
— John Culviner

1

Windows CMD -> set NODE_ENV=production

Windows Powershell -> $env:NODE_ENV="production"

MAC -> export NODE_ENV=production



0

Może to być szansa, że ​​wykonałeś dwa wystąpienia obiektu sekwencjonowania

na przykład: var con1 = new Sequelize (); var con2 = new Sequelize ();

niż ten sam błąd wystąpi

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.