Do użytku w środowiskach express.js. Jakieś sugestie?
Do użytku w środowiskach express.js. Jakieś sugestie?
Odpowiedzi:
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ę.
process.env.NODE_ENV
niezawodne ustawienie z poziomu samej aplikacji. Najlepiej ustaw poprawnie zmienną środowiskową, tak jak Daniel poniżej.
NODE_ENV
jawnie 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_ENV
przywrócić lokalnemu development
.
cross-env NODE_ENV=production
działa na systemach Windows i Linux / Mac.
NODE_ENV=production forever app.js
powinien działać.
w pakiecie.json:
{
...
"scripts": {
"start": "NODE_ENV=production node ./app"
}
...
}
następnie uruchom w terminalu:
npm start
NODE_ENV=production
pliku package.json nie ma większego sensu. Uruchomienie npm start
w 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ą?
Nikogo .env
tu jeszcze nie wymieniono ? Utwórz .env
plik w katalogu głównym aplikacji, a następnie require('dotenv').config()
przeczytaj wartości. Łatwo zmieniany, łatwy do odczytu, wieloplatformowy.
"mode": "production"
w .env
pliku działało.
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.
NODE_ENV=production gulp bundle-production-app
do 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.
/etc/environment
i uruchomić export NODE_ENV=production
?
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
heroku config:set NODE_ENV="production"
NODE_ENV=production
jest teraz domyślny we wdrożeniach Heroku node.js.
W przypadku programu Windows Powershell użyj tego polecenia
$env:NODE_ENV="production" ; node app.js
W OSX polecam dodanie export NODE_ENV=development
do twojego ~/.bash_profile
i / lub ~/.bashrc
i / lub~/.profile
.
Osobiście dodaję ten wpis do mojego, ~/.bashrc
a 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.
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
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 start
korzystania z niejnpm run script-prod
.
W kodzie możesz uzyskać dostęp do bieżącego środowiska za pomocą process.env.NODE_ENV
.
Voila
Windows CMD -> set NODE_ENV=production
Windows Powershell -> $env:NODE_ENV="production"
MAC -> export NODE_ENV=production
Daniel ma fantastyczną odpowiedź, która jest lepszym podejściem do prawidłowego procesu wdrażania (ustaw i zapomnij).
Dla osób korzystających z ekspresu. Możesz użyć serwera grunt-express-server, który również jest fantastyczny. https://www.npmjs.org/package/grunt-express-server
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