何时使用“ npm start”和何时使用“ ng serve”?


157

ng serve 通过开发服务器为Angular项目提供服务

 

npm start运行在程序包的“脚本”对象的“开始”属性中指定的任意命令。如果在“脚本”对象上未指定“开始”属性,它将运行节点server.js。

似乎ng serve启动嵌入式服务器,而npm start启动节点服务器。

有人可以照亮它吗?


1
您是否查看startscripts对象中该命令的内容package.json?您为什么认为完全没有区别?
jonrsharpe

Answers:


204

npm start将运行您为文件start中的scripts对象命令定义的任何内容package.json

因此,如果看起来像这样:

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

然后npm start将运行ng serve


此外,按照OP已有的引号:如果未在“脚本”对象上指定“开始”属性,它将运行node server.js(如果该文件不存在,则失败)。
jonrsharpe '16

1
是的,但是angular-cli会在初始化时创建启动命令,因此,如果他没有修改,它应该是同一命令。
Puigcerber

7
注意:使用npm start效果更好。为了使用它,ng serve您需要全局安装angular cli或从节点模块bin中引用它。
凯尔·普弗默

43

对于使用CLI的项目,通常会使用ng serve。在其他情况下,您可能要使用npm start。这里详细说明:

ng服务

将服务一个项目, “角CLI知道”已使用的角度CLI创建的,即一个项目,特别是使用:

ng new app-name

因此,如果您使用CLI搭建了一个项目,则可能需要使用ng serve

npm开始

可以将其用于不支持 Angular CLI 的项目(或者可以将其简单地用于运行支持Angular CLI的项目的“ ng serve”)

作为其他答案的状态,这是一个npm命令,它将从package.json运行具有标识符“ start”的npm命令,而不仅仅是运行“ 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)


1
我认为您不赞成投票的唯一原因可能是因为您或多或少重复了标注答案中的内容。
Kostrzak

1
我希望您从一句话开始,告诉我何时使用其中一个,然后再跟上您提供的内容。我将从……开始。在一个小项目上,它们可以是同一件事,npm start可以简单地运行ng serve。当项目增长或需要更多步骤时,npm start是启动/运行应用程序的npm标准。我几乎提供了一个答案,然后在阅读了您提供的内容后就意识到没有必要了。您的回答很好。
PatS

13

来自文件

npm-start

这将运行在程序包的“脚本”对象的“开始”属性中指定的任意命令。如果在“脚本”对象上未指定“开始”属性,它将运行节点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提供,以启动由angular-cli创建的angular2应用。当您安装angular-cli时,它将在C:\Users\name\AppData\Roaming\npm(对于Windows)下创建ng.cmd 并执行"%~dp0\node.exe" "%~dp0\node_modules\angular-cli\bin\ng" %*

因此,使用npm start可以执行自己的执行,ng serve而仅适用于angular-cli

另请参见:运行服务时会发生什么?


或者它可能给npm ERR! missing script: start
Leo

1

还有更多。执行的可执行文件是不同的。

npm run start

将运行位于node_modules / .bin中的项目本地可执行文件。

ng serve

将运行另一个全局的可执行文件。

这意味着如果您克隆并安装了一个用angular-cli版本5创建的Angular项目,而您的全局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命令以启动构建服务器。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.