Когда использовать «npm start», а когда «ng serve»?

157

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

 

npm startзапускает произвольную команду, указанную в свойстве «start» пакета объекта «scripts». Если свойство «start» не указано в объекте «scripts», будет запущен узел server.js.

Кажется, что ng serveзапускает встроенный сервер, тогда как npm startзапускает серверы Node.

Может ли кто-то пролить свет на это?

ishandutta2007
источник
1
Вы смотрели на то, что эта startкоманда в scriptsобъекте в вашем package.jsonделает? Почему вы думаете, что есть какая-то разница?
Джоншарп

Ответы:

206

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

Так что, если это выглядит так:

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

Тогда npm startпобежит ng serve.

Puigcerber
источник
Кроме того, согласно цитате, которую уже имел OP: если для объекта «scripts» не указано свойство «start», оно будет работать node server.js(что приведет к сбою, если этого файла нет).
Джоншарп
1
Да, но angular-cli создает команду запуска после инициализации, поэтому, если он не изменил, это должна быть та же команда.
Puigcerber
7
Примечание: использование npm startлучше. Для того, чтобы использовать его, ng serveвам необходимо установить угловую систему глобально или ссылаться на нее из бункера узловых модулей.
Кайл Пфромер
43

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

нг служить

Будет служить проект , который является «Угловая CLI известно», то есть проект , который был создан с помощью Угловое CLI, в частности , с помощью:

ng new app-name

Итак, если вы создали проект с использованием CLI, вы, вероятно, захотите использовать ng serve

начало вечера

Это можно использовать в случае проекта, который не поддерживает Angular CLI (или его можно просто использовать для запуска «ng serve» для проекта, который поддерживает Angular CLI)

Как указано в других ответах, это команда npm, которая будет запускать команду (ы) npm из package.json с идентификатором «start», и она не должна просто запускать «ng serve». В 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-сервер (который использует BrowserSync).

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

Из документа

npm-start :

Это запускает произвольную команду, указанную в свойстве «start» пакета его объекта «scripts». Если свойство «start» не указано в объекте «scripts», будет запущен узел server.js.

это означает, что он будет вызывать стартовые скрипты в package.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есть только для angular-cli

Смотрите также: Что происходит, когда вы запускаете ng serve?

vels4j
источник
Или это может датьnpm ERR! missing script: start
Лев
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команду для запуска сборки сервера.

СМ АМРАН
источник