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

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

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

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

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

7 ответов

Решение

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

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

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

затем npm start побежит ng serve,

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

нг служить

Будет обслуживать проект, ориентированный на Angular CLI, то есть проект, созданный с использованием Angular 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 start приведет к выполнению следующих команд:

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

Это будет одновременно запускать компилятор TypeScript (отслеживая изменения кода) и запускать сервер Node lite (который пользователи BrowserSync)

Из документа

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 (для окон) и выполнить "%~dp0\node.exe" "%~dp0\node_modules\angular-cli\bin\ng" %*

Итак, используя npm start Вы можете сделать свое собственное исполнение где ng serve только для angular-cli

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

Есть больше, чем это. Исполняемые файлы разные.

npm run start

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

ng serve

запустит другой исполняемый файл, который является глобальным.

Это означает, что если вы клонируете и устанавливаете Angular-проект, созданный с помощью angular-cli версии 5, а ваша глобальная cli-версия - 7, то у вас могут возникнуть проблемы с ng build.

Лучший ответ - отличный, короткий и по существу, но я хотел бы поставить свою копейку.

В основном npm start и ng serve могут использоваться как взаимозаменяемые в проектах Angular, если вы не хотите, чтобы команда выполняла дополнительные действия . Позвольте мне подробнее остановиться на этом.

Например, вы можете настроить свой прокси в стартовом скрипте package.json следующим образом: "start": "ng serve --proxy-config proxy.config.json",

Очевидно, что одного использования ng serve будет недостаточно.

Другой случай, когда вместо использования значений по умолчанию вам нужно использовать некоторые дополнительные параметры, например, определение временного порта: ng serve --port 4444

Некоторые параметры доступны только для ng serve, другие - для запуска npm. Обратите внимание, что опция порта работает для обоих, так что в этом случае это снова на ваш вкус. :)

Если вы хотите запустить приложение angular, перенесенное с другого компьютера, без 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 команда для запуска сервера сборки.

Вы должны использовать ng serve, следовательно, npm start - это скрипт, который будет запускать то же самое. Более эффективный способ - это прямой вызов ng serve через идущий, но ненужный скрипт

Другие вопросы по тегам