2014-11-08 11 views
6

Desidero utilizzare $>npm start e utilizzare "nodemon" per lo sviluppo e "nodo" per la produzione. Non riesco a mettere la logica condizionale nel mio file package.json, quindi come si ottiene questo risultato migliore?Node.js - nodemon vs node - sviluppo vs produzione

+0

* pozzo di Certo, puoi mettere la logica condizionale nelle linee degli script di package.json. Questi valori di stringa di script sono semplici interpretati da bash. –

risposta

5

nodemon in realtà legge il valore package.start, quindi se si imposta la proprietà start a ciò che si' d in produzione, come node app.js, quindi eseguire nodemon senza argomenti, verrà eseguito con package.start e riavviato come te ' d aspettarsi nello sviluppo.

+1

Sebbene ciò sia utile quando si utilizza nodemon a livello globale, penso che non sia di aiuto nel caso in cui si voglia digitare 'npm start' e farlo eseguire nodemon se si trova nell'ambiente e nel nodo' dev' quando in 'produzione '. La risposta in basso con la dichiarazione condizionale if sembra essere l'unico modo per ottenerlo. –

+0

@AdamReis: Somtimes una domanda chiede come fare una cosa sbagliata. Questo è noto come il problema XY e non è solo accettabile, ma incoraggiato su SO per rispondere con il modo corretto di ottenere Y senza fare X. In questo caso l'OP potrebbe non sapere come funziona nodemon e quindi chiede qualcosa che non è necessario. Quindi non è necessario portare a termine la domanda letterale se esiste un modo migliore di fare le cose. – slebetman

4

Dovresti essere in grado di utilizzare l'avvio di NPM come normale script di shell.

"scripts": { 
    "start": "if [$NODE_ENV == 'production']; then node app.js; else nodemon app.js; fi" 
} 

Ora per avviare il server per la produzione

$ NODE_ENV='production' npm start 

o per lo sviluppo

$ NODE_ENV='development' npm start 
+0

cool - quando ho provato solo lo script di shell incorporato nel file package.json, ho ricevuto un errore, ma sembra che i comandi successivi aiuteranno. sto usando heroku quindi credo di dover impostare la variabile env su heroku –

+0

questo non funziona per Windows, ma probabilmente funziona per Mac/Unix –

+0

Questa dovrebbe essere la risposta accettata. – jmiraglia

1

mi piaceva la soluzione di Daniel, ma pensato che sarebbe stato ancora più pulita per metterla in un file separato startup.sh:

#!/bin/sh 

if [ $NODE_ENV = "production" ]; then 
    node src/index.js; 
else 
    nodemon src/index.js; 
fi 

Poi basta cambiare package.json a leggere:

"scripts": { 
    "start": ". ./startup.sh" 
},