Kapan menggunakan 'npm start' dan kapan menggunakan 'ng serve'?

157

ng serve melayani proyek Angular melalui server pengembangan

 

npm startmenjalankan perintah sewenang-wenang yang ditentukan dalam properti "mulai" paket dari objek "skrip" -nya. Jika tidak ada properti "mulai" yang ditentukan pada objek "skrip", itu akan menjalankan node server.js.

Sepertinya ng servememulai server tertanam sedangkan npm startmemulai server Node.

Adakah yang bisa menjelaskannya?

ishandutta2007
sumber
1
Pernahkah Anda melihat apa startperintah itu di scriptsobjek di Anda package.jsontidak? Menurut Anda mengapa ada perbedaan sama sekali?
jonrsharpe

Jawaban:

205

npm startakan menjalankan apa pun yang telah Anda tetapkan untuk startperintah scriptsobjek di package.jsonfile Anda .

Jadi jika terlihat seperti ini:

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

Maka npm startakan berjalan ng serve.

Puigcerber
sumber
Juga, per kutipan yang sudah dimiliki OP: Jika tidak ada properti "mulai" yang ditentukan pada objek "skrip", ia akan berjalan node server.js(yang akan gagal jika file itu tidak ada di sana).
jonrsharpe
1
Ya, tapi angular-cli menciptakan perintah mulai saat inisialisasi jadi jika dia belum memodifikasinya haruslah perintah yang sama.
Puigcerber
7
Catatan: Menggunakan npm startlebih baik. Untuk menggunakan ng serveAnda perlu menginstal sudut sudut global atau referensi dari bin modul node.
Kyle Pfromer
43

Untuk proyek yang menggunakan CLI, Anda biasanya akan menggunakan layanan ng. Dalam kasus lain, Anda mungkin ingin menggunakan start npm. Berikut penjelasan terperinci:

ng layani

Akan melayani sebuah proyek yang merupakan 'angular CLI sadar', yaitu sebuah proyek yang telah dibuat dengan menggunakan sudut CLI, terutama menggunakan:

ng new app-name

Jadi, jika Anda telah membuat scaffolded proyek menggunakan CLI, Anda mungkin ingin menggunakan layanan ng

mulai npm

Ini dapat digunakan dalam kasus proyek yang tidak menyadari CLI Angular (atau hanya dapat digunakan untuk menjalankan 'ng serve' untuk proyek yang sadar CLI Angular)

Seperti jawaban lainnya menyatakan, ini adalah perintah npm yang akan menjalankan perintah npm dari package.json yang memiliki pengenal 'start', dan tidak hanya harus menjalankan 'ng serve'. Mungkin untuk memiliki sesuatu seperti yang berikut ini di package.json:

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

Dalam hal ini, 'npm start' akan menghasilkan perintah berikut untuk dijalankan:

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

Ini secara bersamaan akan menjalankan compiler TypeScript (mengawasi perubahan kode), dan menjalankan Node lite-server (yang pengguna BrowserSync)

Chris Halcrow
sumber
1
Saya pikir satu-satunya alasan Anda mendapatkan suara mundur mungkin karena Anda kurang lebih mengulangi apa yang dikatakan dalam jawaban yang ditandai.
Kostrzak
1
Saya lebih suka Anda mulai dengan satu kalimat pernyataan yang memberi tahu saya kapan harus menggunakan satu atau yang lain dan kemudian menindaklanjutinya dengan apa yang Anda berikan. Saya akan mulai dengan ... Pada proyek kecil, mereka bisa menjadi hal yang sama, mulai npm hanya dapat menjalankan layanan. Ketika sebuah proyek tumbuh, atau lebih banyak langkah diperlukan maka mulai npm adalah standar npm untuk memulai / menjalankan aplikasi. Saya hampir memberikan jawaban dan kemudian setelah membaca apa yang Anda berikan menyadari tidak perlu. Jawaban Anda sangat bagus.
PatS
13

Dari dokumen

npm-start :

Ini menjalankan perintah arbitrer yang ditentukan dalam properti "mulai" paket dari objek "skrip" -nya. Jika tidak ada properti "mulai" yang ditentukan pada objek "skrip", itu akan menjalankan node server.js.

yang artinya akan memanggil skrip start di dalam package.json

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

ng layani :

Disediakan oleh angular / angular-cli untuk memulai aplikasi angular2 yang dibuat oleh angular-cli. ketika Anda menginstal angular-cli, itu akan membuat ng.cmd di bawah C:\Users\name\AppData\Roaming\npm(untuk windows) dan mengeksekusi"%~dp0\node.exe" "%~dp0\node_modules\angular-cli\bin\ng" %*

Jadi menggunakan npm startAnda dapat membuat eksekusi Anda sendiri di mana ng servehanya untuk angular-cli

Lihat Juga: Apa yang terjadi ketika Anda menjalankan layanan?

vels4j
sumber
Atau mungkin memberinpm ERR! missing script: start
Leo
1

Ada lebih dari itu. Eksekusi yang dieksekusi berbeda.

npm run start

akan menjalankan proyek Anda yang dapat dieksekusi secara lokal yang terletak di node_modules / .bin Anda.

ng serve

akan menjalankan executable lain yang bersifat global.

Ini berarti jika Anda mengkloning dan menginstal proyek Angular yang dibuat dengan angular-cli versi 5 dan versi global cli Anda adalah 7, maka Anda mungkin memiliki masalah dengan ng build.

yusuf tezel
sumber
0

Jika Anda ingin menjalankan aplikasi sudut porting dari komputer lain tanpa ngperintah kemudian edit package.jsonsebagai berikut

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

Terakhir jalankan npm startperintah biasa untuk mulai membangun server.

SM AMRAN
sumber