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
risposta
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.
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. –
@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
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
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 –
questo non funziona per Windows, ma probabilmente funziona per Mac/Unix –
Questa dovrebbe essere la risposta accettata. – jmiraglia
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"
},
* 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. –