Khi nào nên sử dụng 'npm start' và khi nào nên sử dụng 'ng phục vụ'?


157

ng serve phục vụ một dự án Angular thông qua một máy chủ phát triển

 

npm startchạy một lệnh tùy ý được chỉ định trong thuộc tính "start" của gói đối tượng "scripts" của gói. Nếu không có thuộc tính "start" nào được chỉ định trên đối tượng "scripts", nó sẽ chạy nút server.js.

Có vẻ như ng servekhởi động máy chủ nhúng trong khi npm startkhởi động máy chủ Node.

Ai đó có thể ném một số ánh sáng trên nó?


1
Bạn đã xem startlệnh đó trong scriptsđối tượng trong bạn là package.jsongì chưa? Tại sao bạn nghĩ có sự khác biệt nào cả?
jonrsharpe

Câu trả lời:


204

npm startsẽ chạy bất cứ thứ gì bạn đã xác định cho startlệnh của scriptsđối tượng trong package.jsontệp của bạn .

Vì vậy, nếu nó trông như thế này:

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

Rồi npm startsẽ chạy ng serve.


Ngoài ra, theo trích dẫn mà OP đã có: Nếu không có thuộc tính "bắt đầu" nào được chỉ định trên đối tượng "script", nó sẽ chạy node server.js(sẽ thất bại nếu tệp đó không có ở đó).
jonrsharpe

1
Vâng, nhưng angular-cli tạo lệnh bắt đầu khi khởi tạo, vì vậy nếu anh ta không sửa đổi thì đó sẽ là lệnh tương tự.
Puigcerber

7
Lưu ý: Sử dụng npm startlà tốt hơn. Để sử dụng, ng servebạn cần cài đặt cli góc trên toàn cầu hoặc tham chiếu nó từ bin mô-đun nút.
Kyle Pfromer

43

Đối với một dự án sử dụng CLI, bạn thường sẽ sử dụng ng phục vụ. Trong các trường hợp khác, bạn có thể muốn sử dụng npm start. Dưới đây là lời giải thích chi tiết:

ng phục vụ

Sẽ phục vụ một dự án mà 'góc CLI biết', tức là một dự án đã được tạo ra bằng cách sử dụng góc CLI, đặc biệt là cách sử dụng:

ng new app-name

Vì vậy, nếu bạn đã dàn dựng một dự án bằng CLI, có lẽ bạn sẽ muốn sử dụng ng phục vụ

bắt đầu

Điều này có thể được sử dụng trong trường hợp dự án không nhận biết được Angular CLI (hoặc đơn giản là nó có thể được sử dụng để chạy 'ng phục vụ' cho một dự án mà Angular CLI biết)

Như các câu trả lời khác, đây là một lệnh npm sẽ chạy (các) lệnh npm từ gói.json có mã định danh 'bắt đầu' và nó không phải chạy 'ng phục vụ'. Có thể có một cái gì đó giống như sau trong gói.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",

Trong trường hợp này, 'npm start' sẽ dẫn đến các lệnh sau sẽ được chạy:

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

Điều này sẽ đồng thời chạy trình biên dịch TypeScript (theo dõi các thay đổi mã) và chạy máy chủ lite Node (mà người dùng BrowserSync)


1
Tôi nghĩ rằng lý do duy nhất bạn nhận được downvote có thể là do bạn ít nhiều lặp lại những gì đã được nói trong câu trả lời được đánh dấu.
Kostrzak

1
Tôi muốn bạn bắt đầu với một câu một câu cho tôi biết khi nào nên sử dụng câu này hay câu khác và sau đó theo dõi nó với những gì bạn đã cung cấp. Tôi sẽ bắt đầu với ... Trong một dự án nhỏ, chúng có thể giống nhau, npm start có thể chỉ đơn giản là chạy ng phục vụ. Khi một dự án phát triển, hoặc cần nhiều bước hơn thì npm start là tiêu chuẩn npm để bắt đầu / chạy ứng dụng. Tôi gần như cung cấp một câu trả lời và sau đó sau khi đọc những gì bạn cung cấp nhận ra rằng không cần. Câu trả lời của bạn rất tốt.
PatS

13

Từ tài liệu

npm-start :

Điều này chạy một lệnh tùy ý được chỉ định trong thuộc tính "bắt đầu" của gói đối tượng "script" của gói. Nếu không có thuộc tính "start" nào được chỉ định trên đối tượng "scripts", nó sẽ chạy nút server.js.

có nghĩa là nó sẽ gọi các kịch bản bắt đầu bên trong gói.json

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

ng phục vụ :

Được cung cấp bởi angular / angular-cli để bắt đầu các ứng dụng angular2 được tạo bởi angular-cli. Khi bạn cài đặt angular-cli, nó sẽ tạo ng.cmd bên dưới C:\Users\name\AppData\Roaming\npm(cho windows) và thực thi"%~dp0\node.exe" "%~dp0\node_modules\angular-cli\bin\ng" %*

Vì vậy, sử dụng npm startbạn có thể thực hiện việc thực hiện của riêng bạn, nơi ng servechỉ dành cho angular-cli

Xem thêm: Điều gì xảy ra khi bạn chạy ng phục vụ?


Hoặc nó có thể chonpm ERR! missing script: start
Leo

1

Có nhiều hơn thế. Các thực thi được thực hiện là khác nhau.

npm run start

sẽ chạy các dự án thực thi cục bộ của bạn được đặt trong node_modules / .bin của bạn.

ng serve

sẽ chạy một thực thi khác đó là toàn cầu.

Điều đó có nghĩa là nếu bạn sao chép và cài đặt một dự án Angular được tạo bằng phiên bản angular-cli 5 và phiên bản cli toàn cầu của bạn là 7, thì bạn có thể gặp vấn đề với ng build.


0

Nếu bạn muốn chạy ứng dụng góc được chuyển từ một máy khác mà không có nglệnh thì hãy chỉnh sửa package.jsonnhư sau

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

Cuối cùng chạy npm startlệnh thông thường để bắt đầu xây dựng máy chủ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.