Differenza tra `npm start` e` node app.js`, all'avvio dell'app?


188

Ho installato un'applicazione usando il comando express new 'filename'. Ho appena appreso che è possibile avviare un'applicazione utilizzando:

npm start

Finora ho usato:

node app.js

per avviare il mio server. Qualcuno sa qual è la differenza tra i due? Grazie.

Risposte:


267

Dalla pagina man , inizia npm:

esegue uno script "start" di un pacchetto, se ne è stato fornito uno. Se non viene specificata alcuna versione, avvia la versione "attiva".

Certo, quella descrizione è del tutto inutile, e questo è tutto ciò che dice. Almeno è più documentato di socket.io.

Ad ogni modo, quello che succede davvero è che npm appare nel tuo file package.json e se hai qualcosa del genere

"scripts": {"start": "coffee server.coffee"}

allora lo farà. Se npm non riesce a trovare lo script iniziale, per impostazione predefinita è:

nodo server.js

 


4
Ah capisco Quindi è essenzialmente la stessa cosa a meno che tu non scelga di eseguire più script in fase di compilazione.
Ristrutturato il

1
Se normalmente digiti "node server.js", allora sì.
Yusuf X

1
ho creato una nuova app, npm start non funziona. per la vecchia app funziona bene. eventuali suggerimenti?
discente

1
Ad esempio "node app.js" non rileverà le modifiche del router, mentre "npm start" lo farà, mentre esegue package.json avvia lo script (come "node ./bin/www")
Igor Vaschuk,

1
se inizi con 'npm' puoi riavviare l'app semplicemente digitando 'rs' sulla console.
Elfo,

10

La documentazione è stata aggiornata . La mia risposta presenta cambiamenti sostanziali rispetto alla risposta accettata: volevo riflettere che la documentazione è aggiornata e la risposta accettata presenta alcuni collegamenti interrotti.

Inoltre, non ho capito quando la risposta accettata diceva "per impostazione predefinita node server.js". Penso che la documentazione chiarisca il comportamento predefinito:

NPM-start

Inizia un pacchetto

Sinossi

npm start [-- <args>]

Descrizione

Questo esegue un comando arbitrario specificato nella " start" proprietà del pacchetto " scripts" dell'oggetto . Se non startviene specificata alcuna proprietà " scripts" sull'oggetto " ", verrà eseguita node server.js.

In breve, la corsa npm startpotrebbe fare una delle due cose:

  1. npm start {command_name}: Esegue un comando arbitrario (ovvero se tale comando è specificato nella startproprietà scriptsdell'oggetto package.json )
  2. npm start: Altrimenti se non startesiste alcuna proprietà (o non command_nameviene passata): Esegui node server.js, (che potrebbe non essere appropriato , ad esempio l'OP non ha server.js; l'OP viene eseguito nodeapp.js)
  3. Ho detto che avrei elencato solo 2 articoli, ma ci sono altre possibilità (ad esempio casi di errore). Ad esempio, se non esiste alcun package.jsonnella directory in cui si esegue npm start, è possibile che venga visualizzato un errore:npm ERR! enoent ENOENT: no such file or directory, open '.\package.json'
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.