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


157

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

 

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

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

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


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

Ответы:


206

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

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

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

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


Кроме того, согласно цитате, которую уже имел 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?


Или это может дать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команду для запуска сборки сервера.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.