typescript - Diferența dintre nest start și node dist/main.js?


Lucrez la un proiect folosind Nest, unde configurația „start” din package.json arată astfel:

"start:dev": "nest start --watch",
"start": "node dist/main.js",

și mă întreb de ce a doua linie nu folosește pur și simplu "nest: start". Ambele par să funcționeze la fel. Documentația afirmă că:

nest start pur și simplu asigură că proiectul a fost construit (la fel ca nest build), apoi invocă comanda node într-un mod portabil și ușor pentru a executa aplicația compilată.

Nu văd de ce cineva ar vrea să ruleze un proiect fără să se asigure mai întâi că a fost construit. Deci există vreun motiv pentru a nu folosi nest start? Poate performanța? Există alte diferențe semnificative?

Răspuns #1

În general, @nestjs/cli este un instrument dev grozav, dar nu are prea multă utilitate în producție. De obicei, nu ai modificări în codul tău pe care să le fie nevoie să le recompilezi automat și să repornești serverul cu (flag-ul --watch), nu ai nevoie de depanare live (flag-ul --debug) și de obicei nu trebuie să-ți compilezi codul o dată în producție, deoarece ar trebui să trimiți JS-ul transpilat în producție în locul codului sursă. Din toate aceste motive, nu există cu adevărat un motiv pentru a folosi nest start în producție.

Local, totuși, este un instrument grozav pentru a permite reporniri rapide ale serverului și pentru a genera fișiere folosind comanda nest g. Comanda nest start însăși verifică dacă proiectul este deja compilat, dar verifică doar dacă există un dist, și dacă există, e în regulă, indiferent cât de vechi este acel dist, motiv pentru care de obicei este mai bine să adaugi flag-ul --watch la ea, astfel încât să se efectueze mereu o recompilare.

Răspunsul #2

Din documentația NestJS:

nest start asigură pur și simplu că proiectul a fost construit (la fel ca nest build), apoi invocă comanda node într-un mod portabil și ușor pentru a executa aplicația compilată.

Deci este doar pentru simplitate să rulezi codul în producție și este doar o comandă mai scurtă decât două comenzi secvențiale: npm run build + npm run start:prod. Dacă ești sigur că codul a fost compilat, poți folosi npm run start:prod, altfel nest start.