Różnica między „npm start” a „node app.js” podczas uruchamiania aplikacji?

192

Zainstalowałem aplikację za pomocą polecenia express new 'filename'. Właśnie się dowiedziałem, że możesz uruchomić aplikację za pomocą:

npm start

Do tej pory użyłem:

node app.js

uruchomić mój serwer. Czy ktoś wie, jaka jest różnica między tymi dwoma? Dzięki.

RENGAED
źródło

Odpowiedzi:

273

Od strony man , npm start:

uruchamia skrypt „startowy” pakietu, jeśli został dostarczony. Jeśli żadna wersja nie jest określona, ​​uruchamia wersję „aktywną”.

Trzeba przyznać, że ten opis jest całkowicie nieprzydatny i to wszystko, co mówi. Przynajmniej jest to bardziej udokumentowane niż socket.io.

W każdym razie to, co naprawdę się dzieje, to to, że npm wygląda w twoim pliku package.json i jeśli masz coś takiego

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

wtedy to zrobi. Jeśli npm nie może znaleźć twojego skryptu startowego, domyślnie:

węzeł server.js

 

Yusuf X
źródło
4
O, rozumiem. Zasadniczo jest to to samo, chyba że zdecydujesz się uruchamiać więcej skryptów w czasie kompilacji.
ReneGAED
1
Jeśli normalnie wpiszesz „node server.js”, to tak.
Yusuf X
1
Utworzyłem jedną nową aplikację, npm start nie działa. w przypadku starej aplikacji działa dobrze. jakieś sugestie?
uczeń
1
Na przykład „węzeł app.js” nie będzie podnieść Router zmian, podczas gdy „npm start” będzie, jak to wykonuje skrypt startowy package.json (jak „węzeł ./bin/www”)
Igor Vaschuk
1
jeśli zaczniesz od „npm”, możesz ponownie uruchomić aplikację, wpisując po prostu „rs” na konsoli.
Elf
11

Dokumentacja została zaktualizowana . Moja odpowiedź ma istotne zmiany w porównaniu z odpowiedzią zaakceptowaną: chciałem, aby dokumentacja była aktualna, a zaakceptowana odpowiedź zawiera kilka niedziałających linków.

Nie rozumiałem też, kiedy zaakceptowana odpowiedź brzmiała „domyślnie node server.js”. Myślę, że dokumentacja wyjaśnia domyślne zachowanie:

npm-start

Rozpocznij pakiet

Streszczenie

npm start [-- <args>]

Opis

Uruchamia to dowolne polecenie określone we właściwości " start" pakietu jego scriptsobiektu . Jeśli żadna startwłaściwość " " nie jest określona w obiekcie " scripts", zostanie on uruchomiony node server.js.

Podsumowując, bieganie npm startmoże zrobić jedną z dwóch rzeczy:

  1. npm start {command_name}: Uruchom dowolne polecenie (tj. Jeśli takie polecenie jest określone we startwłaściwości obiektu package.json scripts)
  2. npm start: W przeciwnym razie, jeśli żadna startwłaściwość nie istnieje (lub nie command_namezostała przekazana): Uruchom node server.js(co może nie być właściwe , na przykład OP nie ma server.js; OP działa nodeapp.js)
  3. Powiedziałem, że wymienię tylko 2 pozycje, ale są inne możliwości (tj. Przypadki błędów). Na przykład, jeśli nie ma go package.jsonw katalogu, w którym uruchamiasz npm start, możesz zobaczyć błąd:npm ERR! enoent ENOENT: no such file or directory, open '.\package.json'
Groszek czerwony
źródło