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_ENVniezawodne ustawienie z poziomu samej aplikacji. Najlepiej ustaw poprawnie zmienną środowiskową, tak jak Daniel poniżej.
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.
cross-env NODE_ENV=productiondziała na systemach Windows i Linux / Mac.
NODE_ENV=production forever app.jspowinien działać.
w pakiecie.json:
{
...
"scripts": {
"start": "NODE_ENV=production node ./app"
}
...
}
następnie uruchom w terminalu:
npm start
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ą?
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.
"mode": "production"w .envpliku 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-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.
/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=productionjest 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=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.
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 startkorzystania 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