启动应用程序时,`npm start`和`node app.js`之间的区别?


188

我已经使用command安装了一个应用程序express new 'filename'。我刚刚了解到可以使用以下方法启动应用程序:

npm start

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

node app.js

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

Answers:


267

手册页 npm开始:

如果提供了包,则运行包的“开始”脚本。如果未指定任何版本,则它将启动“活动”版本。

诚然,这种描述完全没有用,仅此而已。至少它比socket.io更有据可查。

无论如何,真正发生的是npm在package.json文件中查找,并且如果您有类似

“脚本”:{“开始”:“咖啡服务器。咖啡”}

然后它将做到这一点。如果npm找不到您的启动脚本,则默认为:

节点server.js

 


4
啊,我明白了。因此,除非您选择在编译时运行更多脚本,否则本质上是相同的。
ReneGAED

1
如果您通常键入“ node server.js”,则可以。
Yusuf X

1
我创建了一个新应用,npm start不起作用。对于旧的应用程序,它运行良好。有什么建议?
学习者

1
例如,“节点app.js”不会拿起路由器的变化,而“故宫开始”会的,因为它执行的package.json启动脚本(如“节点./bin/www”)
伊戈尔Vaschuk

1
如果您以“ npm”开头,则只需在控制台上键入“ rs”即可重新启动应用程序。
精灵

10

文档已更新。我的答案与接受的答案相比有很大的变化:我想反映文档是最新的,并且接受的答案有一些断开的链接。

另外,我不明白什么时候接受的答案是“默认为node server.js”。我认为文档阐明了默认行为:

npm-start

开始打包

概要

npm start [-- <args>]

描述

这将运行在包的对象的start属性中指定scripts的任意命令。如果startscripts对象上没有指定属性,它将运行node server.js

总之,运行npm start可以执行以下两项操作之一:

  1. npm start {command_name}:运行任意命令(即,如果在startpackage.json scripts对象的属性中指定了该命令)
  2. npm start:否则,如果不start存在任何属性(或不command_name传递任何属性):运行node server.js,(可能不合适,例如OP没有server.js; OP运行nodeapp.js
  3. 我说过我只会列出2个项目,但还有其他可能性(即错误情况)。例如,如果package.json在您运行的目录中没有npm start,您可能会看到错误:npm ERR! enoent ENOENT: no such file or directory, open '.\package.json'
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.