Wann wird 'npm start' verwendet und wann wird 'ng serve' verwendet?

157

ng serve bedient ein Angular-Projekt über einen Entwicklungsserver

 

npm startführt einen beliebigen Befehl aus, der in der Eigenschaft "start" des Pakets des Objekts "scripts" angegeben ist. Wenn für das Objekt "scripts" keine "start" -Eigenschaft angegeben ist, wird der Knoten server.js ausgeführt.

Es scheint, als würde ng serveder eingebettete Server gestartet, während npm startdie Knotenserver gestartet werden.

Kann jemand etwas Licht darauf werfen?

ishandutta2007
quelle
1
Haben Sie sich angesehen, was dieser startBefehl scriptsin Ihrem Objekt package.jsonbewirkt? Warum denkst du, gibt es überhaupt einen Unterschied?
Jonrsharpe

Antworten:

204

npm start führt alles aus, was Sie für das definiert haben start Befehl des scriptsObjekts in Ihrer package.jsonDatei definiert haben.

Also, wenn es so aussieht:

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

Dann npm startwird laufen ng serve.

Puigcerber
quelle
Gemäß dem Zitat, das das OP bereits hatte: Wenn für das Objekt "scripts" keine "start" -Eigenschaft angegeben ist, wird es ausgeführt node server.js(was fehlschlägt, wenn diese Datei nicht vorhanden ist).
Jonrsharpe
1
Ja, aber angle-cli erstellt den Startbefehl bei der Initialisierung. Wenn er ihn nicht geändert hat, sollte er der gleiche Befehl sein.
Puigcerber
7
Hinweis: Verwenden npm startist besser. Um es verwenden zu können ng serve, müssen Sie Angular Cli global installieren oder aus dem Knotenmodul-Bin referenzieren.
Kyle Pfromer
43

Für ein Projekt, das die CLI verwendet, verwenden Sie normalerweise ng serve. In anderen Fällen möchten Sie möglicherweise npm start verwenden. Hier die ausführliche Erklärung:

ng dienen

Werde ein Projekt dienen , das ist ‚Angular CLI bewusst‘, das heißt ein Projekt , das den Winkel CLI erstellt wurde unter Verwendung, insbesondere unter Verwendung von :

ng new app-name

Wenn Sie also ein Projekt mithilfe der CLI erstellt haben, möchten Sie wahrscheinlich ng serve verwenden

npm starten

Dies kann im Fall eines Projektes verwendet werden, ist nicht Angular CLI bewusst (oder es kann einfach verwendet werden , laufen ‚ng dienen‘ für ein Projekt , das Eckige CLI bewusst ist)

Wie in den anderen Antworten angegeben, handelt es sich um einen npm-Befehl, der die npm-Befehle aus der package.json mit der Kennung 'start' ausführt und nicht nur 'ng serve' ausführen muss. Es ist möglich, dass in package.json Folgendes enthalten ist:

   "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 diesem Fall führt 'npm start' dazu, dass die folgenden Befehle ausgeführt werden:

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

Dadurch wird gleichzeitig der TypeScript-Compiler ausgeführt (auf Codeänderungen achten) und der Node Lite-Server (der Benutzer BrowserSync verwendet).

Chris Halcrow
quelle
1
Ich denke, der einzige Grund, warum Sie Abstimmungen erhalten haben, könnte sein, dass Sie mehr oder weniger wiederholt haben, was in der markierten Antwort gesagt wurde.
Kostrzak
1
Ich würde es vorziehen, wenn Sie mit einer Aussage aus einem Satz beginnen, die mir sagt, wann ich den einen oder anderen verwenden soll, und dann mit dem, was Sie angegeben haben, weitermachen. Ich würde anfangen mit ... Bei einem kleinen Projekt können sie dasselbe sein, npm start kann einfach ng serve ausführen. Wenn ein Projekt wächst oder mehr Schritte erforderlich sind, ist npm start der npm-Standard zum Starten / Ausführen von Anwendungen. Ich hätte fast eine Antwort gegeben, und nachdem ich gelesen hatte, was Sie zur Verfügung gestellt hatten, wurde mir klar, dass es keine Notwendigkeit gab. Ihre Antwort war sehr gut.
PatS
13

Aus dem Dokument

npm-start :

Dadurch wird ein beliebiger Befehl ausgeführt, der in der Eigenschaft "start" des Pakets des Objekts "scripts" angegeben ist. Wenn für das Objekt "scripts" keine "start" -Eigenschaft angegeben ist, wird der Knoten server.js ausgeführt.

Dies bedeutet, dass die Startskripte in package.json aufgerufen werden

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

ng dienen :

Wird von angle / angle-cli bereitgestellt, um Angular2-Apps zu starten, die von Angular-Cli erstellt wurden. Wenn Sie angle-cli installieren, wird ng.cmd unter C:\Users\name\AppData\Roaming\npm(für Windows) erstellt und ausgeführt"%~dp0\node.exe" "%~dp0\node_modules\angular-cli\bin\ng" %*

Mit können npm startSie also Ihre eigene Ausführung vornehmen, wo dies ng servenur für Angular-Cli ist

Siehe auch: Was passiert, wenn Sie ng serve ausführen?

vels4j
quelle
Oder es kann gebennpm ERR! missing script: start
Leo
1

Es gibt mehr als das. Die ausgeführten ausführbaren Dateien sind unterschiedlich.

npm run start

führt die lokale ausführbare Datei Ihres Projekts aus, die sich in Ihren node_modules / .bin befindet.

ng serve

führt eine andere ausführbare Datei aus, die global ist.

Wenn Sie ein Angular-Projekt klonen und installieren, das mit Angular-Cli Version 5 erstellt wurde und Ihre globale Cli-Version 7 ist, können Probleme mit ng Build auftreten.

Yusuf Tezel
quelle
0

Wenn Sie eine Winkel-App ausführen möchten, die ohne ngBefehl von einem anderen Computer portiert wurde, bearbeiten Sie sie package.jsonwie folgt

"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"
  }

Führen Sie schließlich den üblichen npm startBefehl aus, um den Build-Server zu starten.

SM AMRAN
quelle