Коли використовувати 'npm start' і коли використовувати 'ng serve'?


157

ng serve обслуговує проект Angular через сервер розробки

 

npm startвиконує довільну команду, вказану у властивості пакета "start" об'єкта "script". Якщо в об’єкті "скриптів" не вказано властивість "start", воно запустить node server.js.

Схоже, ng serveзапускає вбудований сервер, тоді як npm startзапускає сервери вузлів.

Може хтось кине на нього трохи світла?


1
Ви подивилися, що робить ця startкоманда в scriptsоб'єкті у ваших package.jsonсправах? Як ви думаєте, чому взагалі є якась різниця?
jonrsharpe

Відповіді:


205

npm startзапустить все, що ви визначили для startкоманди scriptsоб'єкта у вашому package.jsonфайлі.

Тож якщо це виглядає так:

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

Тоді npm startбуде бігати ng serve.


Крім того, за цитатою, яка вже була в ОП: Якщо в об'єкті "скриптів" не вказано властивість "start", воно запуститься node server.js(що не вдасться, якщо цього файлу немає).
jonrsharpe

1
Так, але angular-cli створює команду start після ініціалізації, тому якщо він не змінив, це повинна бути та сама команда.
Puigcerber

7
Примітка: використання npm startкраще. Для використання ng serveвам потрібно встановити кутовий кліп у всьому світі або посилатись на нього з модуля вузла.
Кайл Пфромер

43

Для проекту, який використовує CLI, ви зазвичай будете використовувати ng serve. В інших випадках ви можете використовувати npm start. Ось детальне пояснення:

ng служити

Буде служити проект , який є «Кутова CLI відомо», тобто проект , який був створений з допомогою Кутове CLI, в зокрема , з допомогою:

ng new app-name

Отже, якщо ви скелювали проект за допомогою CLI, ви, ймовірно, захочете використовувати ng serve

npm старт

Це може бути використано у випадку проекту, який не знає Angular CLI (або він може бути просто використаний для запуску "ng serve" для проекту, який відомий Angular CLI)

Як свідчать інші відповіді, це команда npm, яка запустить команду (-и) npm з пакета package.json, який має ідентифікатор "start", і він не повинен просто запускати "ng serve". У пакеті.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 start' призведе до запуску наступних команд:

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

Це одночасно запустить компілятор TypeScript (спостерігаючи за змінами коду) та запустить сервер Node lite (який користувачі BrowserSync)


1
Я думаю, що єдиною причиною, по якій ти отримав поступки, може бути те, що ти більш-менш повторив те, що було сказано у позначеній відповіді.
Кострзак

1
Я б хотів, щоб ви почали з одного речення висловлювання, яке підказує мені, коли потрібно використовувати те чи інше, а потім слідкуйте за цим, що ви надали. Я б почав з ... На невеликому проекті вони можуть бути одне і те ж, npm start може просто запустити ng serve. Коли проект росте або потрібно більше кроків, то npm start - це стандарт npm для запуску / запуску програм. Я майже дав відповідь, а потім, прочитавши те, що ви надали, зрозумів, що немає потреби. Ваша відповідь була дуже хорошою.
PatS

13

З документа

npm-start :

Це виконує довільну команду, вказану у властивості пакета "start" об'єкта "script". Якщо в об’єкті "скриптів" не вказано властивість "start", воно запустить node server.js.

що означає, що він буде викликати стартові сценарії всередині пакета.json

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

слугуйте :

Запропоновано 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це лише для кутових кліпів

Дивіться також: Що відбувається, коли ви запустите ng serve?


Або це може датиnpm ERR! missing script: start
Лев

1

Є більше того. Виконані виконавські файли різні.

npm run start

запустить локальний виконуваний вами проекти, який знаходиться у вашому node_modules / .bin.

ng serve

запустить інший виконуваний файл, який є глобальним.

Це означає, що якщо ви клонуєте та встановите кутовий проект, створений за версією 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команду для запуску сервера.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.