Kiedy używać „npm start”, a kiedy „ng serv”?


157

ng serve obsługuje projekt Angular za pośrednictwem serwera programistycznego

 

npm starturuchamia dowolne polecenie określone we właściwości „start” pakietu w jego obiekcie „scripts”. Jeśli właściwość „start” nie jest określona w obiekcie „scripts”, zostanie uruchomiony węzeł server.js.

Wygląda na to, że ng serveuruchamia wbudowany serwer, podczas gdy npm starturuchamia serwery węzłów.

Czy ktoś może rzucić na to trochę światła?


1
Czy spojrzałeś na to, jakie startpolecenie w scriptsobiekcie w twoim package.jsonrobi? Jak myślisz, dlaczego w ogóle jest jakaś różnica?
jonrsharpe

Odpowiedzi:


205

npm starturuchomi wszystko, co zdefiniowałeś dla startpolecenia scriptsobiektu w twoim package.jsonpliku.

Więc jeśli wygląda to tak:

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

Wtedy npm startbędzie biec ng serve.


Ponadto, zgodnie z cytatem, który już posiadał OP: Jeśli nie określono właściwości "start" w obiekcie "scripts", zostanie on uruchomiony node server.js(co zakończy się niepowodzeniem, jeśli tego pliku nie ma).
jonrsharpe

1
Tak, ale angular-cli tworzy polecenie startu podczas inicjalizacji, więc jeśli nie zmodyfikował, powinno to być to samo polecenie.
Puigcerber,

7
Uwaga: używanie npm startjest lepsze. Aby z niego skorzystać ng serve, musisz zainstalować kątowe cli globalnie lub odwołać się do niego z bin modułów węzła.
Kyle Pfromer

43

W przypadku projektu korzystającego z interfejsu CLI zwykle będzie używany plik ng serv. W innych przypadkach możesz użyć npm start. Tutaj szczegółowe wyjaśnienie:

ng służyć

Będzie obsługiwać projekt, który jest `` świadomy Angular CLI '', tj. Projekt, który został utworzony przy użyciu Angular CLI, w szczególności przy użyciu:

ng new app-name

Tak więc, jeśli zbudowałeś projekt za pomocą CLI, prawdopodobnie będziesz chciał użyć ng serv

npm start

Może to być użyte w przypadku projektu, który nie jest świadomy Angular CLI (lub może być po prostu użyte do uruchomienia 'ng serv' dla projektu, który jest świadomy Angular CLI)

Jak podają inne odpowiedzi, jest to polecenie npm, które uruchomi polecenie (polecenia) npm z pliku package.json, które mają identyfikator „start”, a nie wystarczy uruchomić polecenie „ng serv”. W pliku package.json może znajdować się coś podobnego do następującego:

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

W takim przypadku polecenie „npm start” spowoduje wykonanie następujących poleceń:

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

Spowoduje to jednoczesne uruchomienie kompilatora TypeScript (obserwującego zmiany kodu) i uruchomienie serwera lite-server Node (którego użytkownicy BrowserSync)


1
Myślę, że jedynym powodem, dla którego otrzymałeś głosy negatywne, może być to, że mniej więcej powtórzyłeś to, co zostało powiedziane w zaznaczonej odpowiedzi.
Kostrzak

1
Wolałbym, abyś zaczął od jednego zdania, które mówi mi, kiedy użyć jednego lub drugiego, a następnie kontynuuj to, co podałeś. Zacząłbym od ... W małym projekcie mogą być tym samym, npm start może po prostu uruchomić ng serv. Gdy projekt się rozrasta lub potrzeba więcej kroków, wtedy npm start jest standardem npm do uruchamiania / uruchamiania aplikacji. Prawie udzieliłem odpowiedzi, a potem po przeczytaniu tego, co podałeś, zdałem sobie sprawę, że nie ma takiej potrzeby. Twoja odpowiedź była bardzo dobra.
PatS

13

Z dokumentu

npm-start :

Uruchamia to dowolne polecenie określone we właściwości „start” pakietu w jego obiekcie „scripts”. Jeśli właściwość „start” nie jest określona w obiekcie „scripts”, zostanie uruchomiony węzeł server.js.

co oznacza, że ​​wywoła skrypty startowe z pliku package.json

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

ng służyć :

Dostarczane przez angular / angular-cli do uruchamiania aplikacji angular2, które zostały utworzone przez angular-cli. kiedy zainstalujesz angular-cli, utworzy pod C:\Users\name\AppData\Roaming\npm(dla Windows) plik ng.cmd i wykona"%~dp0\node.exe" "%~dp0\node_modules\angular-cli\bin\ng" %*

Więc używając npm startmożesz stworzyć własne wykonanie, gdzie ng servejest tylko dla angular-cli

Zobacz także: Co się dzieje, gdy uruchamiasz serwis?


Albo może daćnpm ERR! missing script: start
Leo

1

Jest więcej niż to. Wykonywane pliki wykonywalne są różne.

npm run start

uruchomi lokalny plik wykonywalny twojego projektu, który znajduje się w twoim node_modules / .bin.

ng serve

uruchomi inny plik wykonywalny, który jest globalny.

Oznacza to, że jeśli sklonujesz i zainstalujesz projekt Angular, który jest tworzony za pomocą angular-cli w wersji 5, a Twoja globalna wersja CLI to 7, możesz mieć problemy z budowaniem ng.


0

Jeśli chcesz uruchomić aplikację kątową przeniesioną z innego komputera bez ngpolecenia, edytuj package.jsonw następujący sposób

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

Na koniec uruchom zwykłe npm startpolecenie, aby uruchomić serwer kompilacji.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.