Come impostare NODE_ENV su produzione / sviluppo in OS X


Risposte:


664

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.


12
Questo è un cattivo consiglio. L'impostazione sarà process.env.NODE_ENVaffidabile in modo affidabile dall'app stessa. È meglio impostare la variabile di ambiente correttamente come Daniel collegato di seguito.
MK Safi,

15
Sono un fan dell'impostazione NODE_ENVesplicita 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_ENVriportare il tuo locale development.
Jon,

Non così brillante affatto. Ogni volta che esegui la tua app devi aggiungere quella env var. Che schifo Postata la soluzione migliore di seguito.
Lukas Liesis,

2
Fare riferimento a npmjs.com/package/cross-env per una semplice soluzione multipiattaforma. cross-env NODE_ENV=productionfunziona su Windows e Linux / Mac.
AntonB,

1
@Gleb NODE_ENV=production forever app.jsdovrebbe funzionare.
Farid Nouri Neshat,

102

in package.json:

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

quindi corri nel terminale:

npm start

1
non iniziare a mettere un sacco di script in package.json, è una cattiva pratica perché introduci incoerenze e uccide l'immutabilità nei tuoi progetti. Conosco un sacco di persone che creano script per eseguire grugniti o deglutire, ma non farlo
Positivo

38
@WeDoTDD di cosa stai parlando? Questi script sono pensati per essere usati in modo simile a come funziona makefile. Usarlo come esempio o come hai già detto per eseguire gulp è un caso d'uso perfettamente ragionevole. Per compiti semplici ora non uso nemmeno gulp e faccio tutto all'interno dello script, è molto più veloce per far funzionare le cose e lascio che il webpack faccia il lavoro che era solito fare con gulp.
Marko Grešak,

15
@WTF - Cosa intendi con "cattiva pratica" per usare gli script in package.json? Questo è il punto degli script: sezione, per mettere gli script! È perfettamente valido ed elimina la necessità di sorso o grugnito. Tutto fatto tramite comando e webpack.
TetraDev,

6
@WTF L'uso degli script migliora notevolmente la coerenza. È possibile impostare un set standard di comandi da utilizzare su più progetti che potrebbero non utilizzare gli stessi script di compilazione, librerie, ecc. Sottostanti. Si potrebbe almeno provare a sostenere il proprio punto con fatti ed esempi.
Lewis Diamond,

4
Mettere NODE_ENV=productionin package.json non ha molto senso. L'esecuzione npm startin 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?
Nateowami,

65

Nessuno .envancora menzionato qui? Crea un .envfile nella root dell'app, quindi require('dotenv').config()leggi i valori. Facile da modificare, da leggere, multipiattaforma.

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


1
Strano nessuno lo menziona, la migliore soluzione secondo me. Inserisci il nome dell'ambiente nello stesso file con il resto delle variabili.
Asinus Rex,

2
L'impostazione di NODE_ENV nel file .env non funzionerà. Vedi questo: github.com/motdotla/dotenv/issues/328
Michael Zelensky

Per me l'impostazione "mode": "production"nel .envfile ha funzionato.
DarkLite1

46

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.


2
Incubo di manutenzione. Che dire di una casella in cui non si dispone delle autorizzazioni per / etc?
Thomas McCabe,

1
Uso personalmente NODE_ENV=production gulp bundle-production-appper 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.
Lukas Liesis,

+1 per parlare di come farlo persistere. Mi chiedo quante persone l'hanno impostato solo nella sessione corrente pensando che persisterà. Che dire prima di un riavvio? Se vuoi impostarlo subito, dovresti inserirlo /etc/environment ed eseguirlo export NODE_ENV=production?
Nateowami,

24

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

22
heroku config:set NODE_ENV="production"

2
ahhh questo è quello di cui avevo bisogno. sei fantastico
Connor Leech,

5
NODE_ENV=productionè ora l'impostazione predefinita nelle distribuzioni Heroku node.js.
sean,

1
heroku non è l'unico posto da schierare
Pavan Katepalli il

9

Per Windows Powershell utilizzare questo comando

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

6

Su OSX ti consiglio di aggiungere export NODE_ENV=developmental tuo ~/.bash_profilee / o ~/.bashrce / o ~/.profile.

Personalmente aggiungo quella voce al mio ~/.bashrce 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.


2

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


1
non scomparirà dopo il riavvio? Non ho finestre, non posso provare me stesso.
Lukas Liesis,

Se si richiede il riavvio del nodo no, non scomparirà finché non si chiude completamente il prompt dei comandi. Ma se Windows Server si riavvia spesso scomparirà.
Garenyondem,

2
parlando di riavvio del sistema operativo. Ecco perché è meglio trovare un altro modo per smettere di chiedermi ogni volta che vengono installati gli aggiornamenti di Windows, o qualsiasi riavvio, su questo problema ancora e ancora.
Lukas Liesis,

2

Se usi il webpack nella tua applicazione, puoi semplicemente impostarlo lì, usandoDefinePlugin ...

Quindi, nella tua pluginsezione, imposta NODE_ENV su production:

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

1

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 startuse npm run script-prod.

Nel codice è possibile accedere all'ambiente corrente con process.env.NODE_ENV.

Ecco.


NODE_ENV dovrebbe essere "sviluppo" o "produzione" quanto sopra non è riconosciuto dal codice di terze parti (anche se potresti vederlo process.env)
John Culviner

1

Windows CMD -> set NODE_ENV=production

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

MAC -> export NODE_ENV=production



0

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.