启动应用程序时,“npm start”和“node app.js”的区别是什么?

195

我已经使用命令express new '文件名'安装了一个应用程序。我刚刚学到你可以使用以下方式启动应用程序:

npm start

到目前为止,我已经使用了:

node app.js

我要启动我的服务器。有人知道这两者之间的区别吗?谢谢。

2个回答

279

来自man page,npm start:

运行程序包中提供的“start”脚本。 如果未指定版本,则会启动“活动”版本。

诚然,这个描述完全没有帮助,这就是它所说的。 至少比socket.io更有文档记录。

无论如何,真正发生的是npm查找您的package.json文件,如果您有类似以下内容:

"scripts": { "start": "coffee server.coffee" }

那么它就会执行该命令。 如果npm找不到您的启动脚本,则默认为:

node server.js

 


4
啊,我明白了。所以除非你选择在编译时运行更多脚本,否则它本质上是相同的东西。 - ReneGAED
1
如果你通常输入“node server.js”,那么是的。 - Yusuf X
1
我创建了一个新的应用程序,npm start不起作用。对于旧应用程序,它运行良好。有什么建议吗? - learner
1
例如,"node app.js" 不会捕获路由器的更改,而 "npm start" 会,因为它执行 package.json 的启动脚本(如 "node ./bin/www")。 - Igor Vaschuk
1
如果你使用npm,只需在控制台上键入“rs”,即可重新启动应用程序。 - Elf
显示剩余3条评论

11

文档已更新。我的回答与被接受的回答有很大不同:我希望反映文档是最新的,而被接受的回答中有一些链接已经失效。

此外,我没有理解被接受的答案中的“它默认为 node server.js ”。我认为文档澄清了默认行为:

  

npm-start

     

启动软件包

     

简介

     

npm start [-- <args>]

     

描述

     

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

总之,运行npm start可能会做两件事:

  1. npm start {command_name}:运行任意命令(例如在package.json的scripts对象的start属性中指定了此类命令)
  2. npm start:否则,如果不存在start属性(或没有传递command_name),则运行node server.js(这可能不合适,例如OP没有server.js; OP运行nodeapp.js
  3. 我说过只列出了两项内容,但是还有其他可能性(即错误情况)。例如,在运行npm start的目录中没有package.json文件,您可能会看到错误:npm ERR!enoent ENOENT:没有这样的文件或目录,打开'。\package.json'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接