Per l'uso in ambienti express.js. Eventuali suggerimenti?
Per l'uso in ambienti express.js. Eventuali suggerimenti?
Risposte:
Prima di eseguire l'app, puoi farlo in console,
export NODE_ENV=production
O se sei in Windows puoi provare questo:
SET NODE_ENV=production
oppure puoi eseguire la tua app in questo modo:
NODE_ENV=production node app.js
Puoi anche impostarlo nel tuo file js:
process.env.NODE_ENV = 'production';
Ma non consiglio di farlo nel tuo file di runtime, dal momento che non è facile aprire VIM nel tuo server e cambiarlo in produzione. Puoi creare un file config.json nella tua directory e ogni volta che la tua app viene eseguita, legge da essa e imposta la configurazione.
process.env.NODE_ENV
affidabile in modo affidabile dall'app stessa. È meglio impostare la variabile di ambiente correttamente come Daniel collegato di seguito.
NODE_ENV
esplicita ogni volta che esegui l'app, come nel secondo esempio ( NODE_ENV=production node app.js
). In questo modo potresti potenzialmente salvarti da qualche futuro taglio di capelli nel caso in cui ti dimentichi di NODE_ENV
riportare il tuo locale development
.
cross-env NODE_ENV=production
funziona su Windows e Linux / Mac.
NODE_ENV=production forever app.js
dovrebbe funzionare.
in package.json:
{
...
"scripts": {
"start": "NODE_ENV=production node ./app"
}
...
}
quindi corri nel terminale:
npm start
NODE_ENV=production
in package.json non ha molto senso. L'esecuzione npm start
in sviluppo lo eseguirà in produzione. Potresti scrivere il tuo codice come se fosse sempre di produzione, poiché lo esegui sempre in quel modo. L'unico motivo che vedo per fare questo sarebbe costringere altri moduli (ad esempio Express) a funzionare in modalità di produzione. Perché usare le variabili d'ambiente se non cambiano mai?
Nessuno .env
ancora menzionato qui? Crea un .env
file nella root dell'app, quindi require('dotenv').config()
leggi i valori. Facile da modificare, da leggere, multipiattaforma.
"mode": "production"
nel .env
file ha funzionato.
export NODE_ENV=production
è una cattiva soluzione, scompare dopo il riavvio.
se non vuoi più preoccuparti di quella variabile, aggiungila a questo file:
/etc/environment
non utilizzare la sintassi di esportazione, basta scrivere (in una nuova riga se del contenuto è già presente):
NODE_ENV=production
funziona dopo il riavvio. Non dovrai più immettere nuovamente NODE_ENV = comando di produzione ovunque e utilizzare il nodo con tutto ciò che desideri - per sempre, pm2 ...
Per heroku:
heroku config:set NODE_ENV="production"
che è in realtà predefinito.
NODE_ENV=production gulp bundle-production-app
per raggruppare script pronti per la produzione, nel server NODE_ENV si trova nell'ambiente del server e nella macchina di sviluppo non è presente. In alcune macchine è un incubo se non è impostato e ti aspetti di averlo sempre impostato . In alcuni, ti aspetti di non averlo, quindi non aggiungi. Ad ogni modo, mentre eseguo le interfacce utente chiarisco se è in modalità di sviluppo, quindi non hai mai una domanda se è acceso o spento. Se NODE_ENV è! == produzione è nella tua faccia che sei in un'altra modalità, quindi nessun incubo. Tutto chiaro, tutto bene.
/etc/environment
ed eseguirlo export NODE_ENV=production
?
Per non preoccuparti se stai eseguendo i tuoi script su Windows, Mac o Linux installa il pacchetto cross-env . Quindi puoi usare facilmente i tuoi script, in questo modo:
"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"
}
Enormi oggetti di scena per gli sviluppatori di questo pacchetto.
npm install --save-dev cross-env
heroku config:set NODE_ENV="production"
NODE_ENV=production
è ora l'impostazione predefinita nelle distribuzioni Heroku node.js.
Per Windows Powershell utilizzare questo comando
$env:NODE_ENV="production" ; node app.js
Su OSX ti consiglio di aggiungere export NODE_ENV=development
al tuo ~/.bash_profile
e / o ~/.bashrc
e / o ~/.profile
.
Personalmente aggiungo quella voce al mio ~/.bashrc
e poi ho il~/.bash_profile
~/.profile
importazione del contenuto di quel file, quindi è coerente tra gli ambienti.
Dopo aver effettuato queste aggiunte, assicurati di riavviare il terminale per selezionare le impostazioni.
Se sei su windows. Apri il tuo cmd nella cartella giusta, quindi prima
set node_env={your env name here}
premi invio quindi puoi iniziare il tuo nodo con
node app.js
inizierà con l'impostazione ENV
Per avere più ambienti devi prima avere tutte le risposte (parametro NODE_ENV ed esportarlo), ma uso un approccio molto semplice senza la necessità di installare nulla. Nel tuo package.json basta inserire uno script per ogni ambiente di cui hai bisogno, in questo modo:
...
"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"
}
...
Quindi, per avviare l'app invece di utilizzare npm start
use npm run script-prod
.
Nel codice è possibile accedere all'ambiente corrente con process.env.NODE_ENV
.
Ecco.
Windows CMD -> set NODE_ENV=production
Windows Powershell -> $env:NODE_ENV="production"
MAC -> export NODE_ENV=production
Daniel ha una risposta fantastica che è l'approccio migliore per il corretto processo di distribuzione (imposta e dimentica).
Per quelli che usano express. Puoi usare anche grunt-express-server che è fantastico. https://www.npmjs.org/package/grunt-express-server
Potrebbe essere una possibilità che tu abbia creato due istanze di sequelize object
ad esempio: var con1 = new Sequelize (); var con2 = new Sequelize ();
che si verificherà anche lo stesso errore