เมื่อใดควรใช้ 'npm start' และเมื่อใดควรใช้ 'ng เสิร์ฟ'


157

ng serve ให้บริการโครงการเชิงมุมผ่านเซิร์ฟเวอร์การพัฒนา

 

npm startเรียกใช้คำสั่งโดยพลการที่ระบุในคุณสมบัติ "เริ่มต้น" ของแพ็คเกจ "วัตถุ" สคริปต์ หากไม่ได้ระบุคุณสมบัติ "เริ่มต้น" ไว้ในวัตถุ "สคริปต์" จะเรียกใช้ node server.js

ดูเหมือนว่าจะng serveเริ่มเซิร์ฟเวอร์ที่ฝังตัวในขณะที่npm startเริ่มเซิร์ฟเวอร์ Node

ใครบางคนสามารถโยนแสงบนมันได้หรือไม่


1
คุณเคยดูที่startคำสั่งนั้นในscriptsวัตถุที่คุณpackage.jsonทำหรือไม่? ทำไมคุณถึงคิดว่ามันมีอะไรแตกต่างกันบ้าง?
jonrsharpe

คำตอบ:


205

npm startจะเรียกใช้สิ่งที่คุณได้กำหนดไว้สำหรับstartคำสั่งของscriptsวัตถุในของคุณpackage.jsonไฟล์

ดังนั้นถ้ามันเป็นเช่นนี้:

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

จากนั้นก็จะทำงานnpm startng serve


นอกจากนี้ตามที่อ้างถึง OP ที่มีอยู่แล้ว: หากไม่มีการระบุคุณสมบัติ "เริ่มต้น" บนวัตถุ "สคริปต์" มันจะทำงานnode server.js(ซึ่งจะล้มเหลวหากไฟล์นั้นไม่มีอยู่)
jonrsharpe

1
ใช่ แต่ angular-cli สร้างคำสั่งเริ่มต้นเมื่อเริ่มต้นดังนั้นหากเขาไม่ได้แก้ไขมันควรจะเป็นคำสั่งเดียวกัน
Puigcerber

7
หมายเหตุ: การใช้npm startดีกว่า ในการใช้งานng serveคุณจำเป็นต้องติดตั้ง angular cli ทั่วโลกหรืออ้างอิงจากโหนดโมดูล bin
Kyle Pfromer

43

สำหรับโครงการที่ใช้ CLI คุณมักจะใช้บริการ ng ในกรณีอื่น ๆ คุณอาจต้องการใช้การเริ่มต้น npm นี่คือคำอธิบายรายละเอียด:

ทำหน้าที่

จะทำหน้าที่ในโครงการที่เป็น 'CLI เชิงมุมตระหนักถึง' คือโครงการที่ได้รับการสร้างขึ้นโดยใช้เชิงมุม CLI โดยเฉพาะอย่างยิ่งการใช้:

ng new app-name

ดังนั้นหากคุณนั่งร้านโครงการโดยใช้ CLI คุณอาจต้องการใช้บริการ ng

เริ่มต้นนาที

สามารถใช้ในกรณีของโครงการที่ไม่ได้เป็นรู้ Angular CLI (หรือสามารถใช้เพื่อเรียกใช้ 'บริการ ng' สำหรับโครงการที่ตระหนักถึง Angular CLI)

ในฐานะที่เป็นคำตอบอื่น ๆ นี่คือคำสั่ง npm ที่จะเรียกใช้คำสั่ง npm จาก package.json ที่มีตัวระบุ 'เริ่มต้น' และไม่เพียงแค่เรียกใช้ 'ng เสิร์ฟ' เป็นไปได้ที่จะมีสิ่งต่อไปนี้ใน 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",

ในกรณีนี้ 'การเริ่มต้น npm' จะส่งผลให้คำสั่งต่อไปนี้ถูกเรียกใช้:

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

สิ่งนี้จะรันคอมไพเลอร์ TypeScript พร้อมกัน (ดูการเปลี่ยนแปลงรหัส) และเรียกใช้ Node lite-server (ซึ่งผู้ใช้ BrowserSync)


1
ฉันคิดว่าเหตุผลเดียวที่คุณได้รับการโหวตอาจเป็นเพราะคุณได้ทำซ้ำสิ่งที่ถูกบอกในคำตอบที่ทำเครื่องหมายไว้มากขึ้นหรือน้อยลง
Kostrzak

1
ฉันต้องการให้คุณเริ่มต้นด้วยประโยคหนึ่งประโยคที่บอกฉันว่าควรใช้ประโยคใดประโยคหนึ่งและอีกประโยคจากนั้นติดตามด้วยสิ่งที่คุณให้ไว้ ฉันจะเริ่มต้นด้วย ... ในโครงการขนาดเล็กพวกเขาสามารถเป็นสิ่งเดียวกันเริ่มต้นที่ PM สามารถเรียกใช้บริการ ng เมื่อโครงการเติบโตขึ้นหรือจำเป็นต้องมีขั้นตอนเพิ่มเติมการเริ่มต้น npm คือมาตรฐาน npm สำหรับการเริ่มต้น / การใช้งานแอป ฉันเกือบให้คำตอบแล้วหลังจากอ่านสิ่งที่คุณให้มาตระหนักว่าไม่จำเป็น คำตอบของคุณดีมาก
PatS

13

จากเอกสาร

npm-start :

สิ่งนี้จะเรียกใช้คำสั่งโดยพลการที่ระบุในคุณสมบัติ "เริ่มต้น" ของแพ็คเกจ "วัตถุ" สคริปต์ หากไม่ได้ระบุคุณสมบัติ "เริ่มต้น" ไว้ในวัตถุ "สคริปต์" จะเรียกใช้ node server.js

ซึ่งหมายความว่ามันจะเรียกสคริปต์เริ่มต้นภายใน package.json

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

ng ให้บริการ :

จัดทำโดย angular / angular-cli เพื่อเริ่มแอป angular2 ซึ่งสร้างโดย angular-cli เมื่อคุณติดตั้ง angular-cli มันจะสร้าง ng.cmd ภายใต้C:\Users\name\AppData\Roaming\npm(สำหรับ windows) และดำเนินการ"%~dp0\node.exe" "%~dp0\node_modules\angular-cli\bin\ng" %*

ดังนั้นการใช้งานnpm startคุณสามารถทำการประมวลผลของคุณเองซึ่งng serveเป็นเพียงสำหรับ angular-cli

ดูเพิ่มเติม: จะเกิดอะไรขึ้นเมื่อคุณเรียกใช้บริการ ng


หรืออาจให้npm ERR! missing script: start
Leo

1

มีมากกว่านั้น ไฟล์สั่งการที่เรียกใช้งานนั้นแตกต่างกัน

npm run start

จะรันโปรเจ็กต์ของคุณแบบโลคัลที่ตั้งอยู่ใน node_modules / .bin ของคุณ

ng serve

จะเรียกใช้ไฟล์ปฏิบัติการอื่นซึ่งเป็นโกลบอล

หมายความว่าถ้าคุณโคลนและติดตั้งโครงการ Angular ซึ่งสร้างขึ้นด้วย angular-cli รุ่น 5 และรุ่น cli ทั่วโลกของคุณคือ 7 คุณอาจมีปัญหากับ ng build


0

หากคุณต้องการเรียกใช้แอปเชิงมุมที่ย้ายจากเครื่องอื่นโดยไม่มีngคำสั่งให้แก้ไขpackage.jsonดังนี้

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

สุดท้ายเรียกใช้npm startคำสั่งปกติเพื่อเริ่มสร้างเซิร์ฟเวอร์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.