何时使用'npm start'以及何时使用'ng serve'?

时间:2016-10-22 09:34:30

标签: angular angular-cli

  

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

  

npm start运行包中“start”中指定的任意命令   其“脚本”对象的属性。如果未指定“start”属性   在“scripts”对象上,它将运行node server.js。

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

有人能说些什么吗?

7 个答案:

答案 0 :(得分:153)

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

所以如果它看起来像这样:

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

然后npm start将运行ng serve

答案 1 :(得分:26)

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

ng serve

将提供 'Angular CLI aware'的项目,即使用Angular CLI创建的项目,特别是使用:

ng new app-name

所以,如果你使用CLI搭建了一个项目,你可能想要使用ng服务

npm start

这可以用于 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-server(用户BrowserSync)

答案 2 :(得分:10)

来自文件

npm-start

它运行在其“scripts”对象的包的“start”属性中指定的任意命令。如果在“scripts”对象上未指定“start”属性,则它将运行node server.js。

这意味着它将调用package.json

中的启动脚本
"scripts": {
"start": "tsc && concurrently \"npm run tsc:w\" \"npm run lite --baseDir ./app --port 8001\" ",
"lite": "lite-server",
 ...
}

ng serve

由angular / angular-cli提供,以启动由angular-cli创建的angular2应用程序。当你安装angular-cli时,它将在C:\Users\name\AppData\Roaming\npm下创建ng.cmd(对于windows)并执行"%~dp0\node.exe" "%~dp0\node_modules\angular-cli\bin\ng" %*

所以使用npm start你可以自己执行ng serve仅适用于angular-cli

另请参阅:What happens when you run ng serve?

答案 3 :(得分:1)

最佳答案很棒、简短且切中要害,但我想把我的便士放在一边。

基本上 npm startng serve 可以互换使用在 Angular 项目中只要你不希望命令做额外的事情。让我详细说明一下。

例如,您可能希望在 package.json 启动脚本中配置您的代理,如下所示:"start": "ng serve --proxy-config proxy.config.json",

显然仅使用 ng serve 是不够的。

另一个例子是当你需要使用一些额外的选项来代替使用默认值时,比如定义临时端口:ng serve --port 4444

有些参数只对 ng serve 可用,有些对 npm start 可用。请注意,端口选项对两者都适用,因此在这种情况下,再次取决于您的口味。 :)

答案 4 :(得分:0)

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

npm run start

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

ng serve

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

这意味着如果您克隆并安装一个使用angular-cli版本5创建的Angular项目,而您的全局cli版本是7,那么您可能会遇到ng build问题。

答案 5 :(得分:0)

如果要运行从另一台计算机移植的角度应用程序,而无需使用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

最后运行通常的{{1}}命令以启动构建服务器。

答案 6 :(得分:-1)

您应该使用ng serve,因此npm start是一个将运行相同脚本的脚本。更有效的方法是通过不必要的脚本直接调用ng serve