Quando usare 'npm start' e quando usare 'ng serve'?


157

ng serve serve un progetto angolare tramite un server di sviluppo

 

npm startesegue un comando arbitrario specificato nella proprietà "start" del pacchetto del suo oggetto "script". Se non viene specificata alcuna proprietà "start" sull'oggetto "script", verrà eseguito il nodo server.js.

Sembra che ng serveavvia il server incorporato mentre npm startavvia i server Node.

Qualcuno può farci luce?


1
Hai visto cosa fa quel startcomando scriptsnell'oggetto nel tuo package.json? Perché pensi che ci sia qualche differenza?
jonrsharpe,

Risposte:


205

npm starteseguirà qualunque cosa tu abbia definito per il startcomando scriptsdell'oggetto nel tuo package.jsonfile.

Quindi, se si presenta così:

"scripts": {
  "start": "ng serve"
}

Quindi npm startverrà eseguito ng serve.


Inoltre, secondo la citazione che l'OP aveva già: Se sull'oggetto "script" non è stata specificata alcuna proprietà "start", verrà eseguita node server.js(il che fallirà se il file non è presente).
jonrsharpe,

1
Sì, ma angular-cli crea il comando start dopo l'inizializzazione, quindi se non ha modificato dovrebbe essere lo stesso comando.
Puigcerber,

7
Nota: usare npm startè meglio. Per ng servepoterlo utilizzare è necessario installare cli angolari a livello globale o fare riferimento al contenitore dei moduli del nodo.
Kyle Pfromer il

43

Per un progetto che utilizza l'interfaccia della riga di comando, di solito si utilizza ng serve. In altri casi potresti voler usare npm start. Ecco la spiegazione dettagliata:

servire

Servirà un progetto che è "a conoscenza della CLI angolare", ovvero un progetto che è stato creato utilizzando la CLI angolare, in particolare utilizzando:

ng new app-name

Quindi, se hai impalcato un progetto usando la CLI, probabilmente vorrai usare ng serve

inizio npm

Questo può essere usato nel caso di un progetto che non è a conoscenza della CLI angolare (o può semplicemente essere usato per eseguire 'ng serve' per un progetto che è a conoscenza della CLI angolare)

Come affermano le altre risposte, questo è un comando npm che eseguirà i comandi npm dal package.json che ha l'identificatore 'start' e non deve semplicemente eseguire 'ng serve'. Nel pacchetto.json è possibile avere qualcosa di simile al seguente:

   "scripts": {
     "build:watch": "tsc -p src/ -w",
     "serve": "lite-server -c=bs-config.json",
     "start": "concurrently \"npm run build:watch\" \"npm run serve\""
     ...
   },
   "devDependencies": {
     "concurrently": "^3.2.0",
     "lite-server": "^2.2.2",

In questo caso, 'npm start' comporterà l'esecuzione dei seguenti comandi:

concurrently "npm run build:watch" "npm run serve"

Ciò eseguirà contemporaneamente il compilatore TypeScript (in attesa di modifiche al codice) ed eseguirà il server lite Node (che gli utenti BrowserSync)


1
Penso che l'unica ragione per cui hai ottenuto i voti negativi potrebbe essere perché hai ripetuto più o meno ciò che è stato detto nella risposta contrassegnata.
Kostrzak,

1
Preferirei che inizi con un'istruzione di una frase che mi dice quando usare l'una o l'altra e quindi seguirla con quello che hai fornito. Vorrei iniziare con ... Su un piccolo progetto, possono essere la stessa cosa, npm start può semplicemente eseguire ng serve. Quando un progetto cresce o sono necessari più passaggi, npm start è lo standard npm per l'avvio / l'esecuzione delle applicazioni. Ho quasi fornito una risposta e poi, dopo aver letto quello che hai fornito, ho capito che non ce n'era bisogno. La tua risposta è stata molto buona
PatS

13

Dal documento

npm-start :

Questo esegue un comando arbitrario specificato nella proprietà "start" del pacchetto del suo oggetto "script". Se non viene specificata alcuna proprietà "start" sull'oggetto "script", verrà eseguito il nodo server.js.

il che significa che chiamerà gli script di avvio all'interno di package.json

"scripts": {
"start": "tsc && concurrently \"npm run tsc:w\" \"npm run lite --baseDir ./app --port 8001\" ",
"lite": "lite-server",
 ...
}

serve :

Fornito da angular / angular-cli per avviare le app angular2 create da angular-cli. quando si installa angular-cli, verrà creato ng.cmd sotto C:\Users\name\AppData\Roaming\npm(per windows) ed eseguito"%~dp0\node.exe" "%~dp0\node_modules\angular-cli\bin\ng" %*

Quindi usando npm startte puoi fare la tua esecuzione dove ng serveè solo per angular-cli

Vedi anche: Cosa succede quando esegui ng serve?


O potrebbe darenpm ERR! missing script: start
Leone,

1

Ce ne sono molti di più. Gli eseguibili eseguiti sono diversi.

npm run start

eseguirà i tuoi progetti eseguibili locali che si trovano nel tuo node_modules / .bin.

ng serve

eseguirà un altro eseguibile che è globale.

Significa che se cloni e installi un progetto Angular che viene creato con angular-cli versione 5 e la tua versione cli globale è 7, potresti avere problemi con ng build.


0

Se vuoi eseguire un'app angolare trasferita da un'altra macchina senza ngcomando, modifica package.jsoncome segue

"scripts": {
    "ng": "ng",
    "start": "node node_modules/.bin/ng serve",
    "build": "node node_modules/.bin/ng build",
    "test": "node node_modules/.bin/ng test",
    "lint": "node node_modules/.bin/ng lint",
    "e2e": "node node_modules/.bin/ng e2e"
  }

Finalmente esegui il solito npm startcomando per avviare il build server.

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.