我对Node非常陌生,正在努力理解应用程序的基础知识。我好奇为什么这两个命令:
node app.js
--vs--
npm start
在控制台输出相同的内容并继续“监听”,但为什么当我尝试访问http://localhost:3000时,只有在运行第一个命令时才会出现404错误。
我看到Express 4似乎具有不同的应用程序结构,但是为什么其中一个成功侦听而另一个却没有,尽管控制台中表现相同?
任何解释都有帮助。谢谢!
我对Node非常陌生,正在努力理解应用程序的基础知识。我好奇为什么这两个命令:
node app.js
--vs--
npm start
在控制台输出相同的内容并继续“监听”,但为什么当我尝试访问http://localhost:3000时,只有在运行第一个命令时才会出现404错误。
我看到Express 4似乎具有不同的应用程序结构,但是为什么其中一个成功侦听而另一个却没有,尽管控制台中表现相同?
任何解释都有帮助。谢谢!
npm start
会运行在你的'package.json'文件中所定义的'start'脚本配置要运行的内容,node app.js
会执行'node'中的'app.js'文件。欲了解更多信息,请参见http://browsenpm.org/package.json。因此,如果你的'package.json'文件如下,则这两个命令是完全不同的。{
"name": "my cool node project",
....
"scripts": {
"start": "node index.js"
}
....
}
以下是你需要的 package.json,它将使它们完全相同。{
"name": "my cool node project",
....
"scripts": {
"start": "node app.js"
}
....
}
我建议您先检查“start”脚本设置运行的内容,并尝试直接在CLI中运行相同的命令,而不是通过NPM运行,以便查看差异所在。
但为什么其中一个可以成功监听,而另一个却不能呢?
如果服务器返回404,则说明服务器正在侦听,但文档根或访问权限未正确设置,因此返回“文件未找到”的响应。
除了上面的回答之外,我想补充一点:
如果在您的 package.json
文件中没有 scripts
部分,则执行 npm start
将导致 npm
在该目录中查找 server.js
,如果找到则使用 node server.js
运行它,否则会抛出npm ERR! missing script: start
作为错误消息。
文档:npm-start
我想补充一些内容,这可能有助于未来的受众。
首先
Node - 是任何JavaScript代码的运行时
NPM是包管理器,可用于下载/更新/运行软件包等等,包括3个组成部分
在此处阅读有关它为您完成的所有操作。
node any.js - 这将简单地运行名为"any.js"的JavaScript文件。因此,如果其中没有启动服务器的代码,则会出现错误
npm start - 将运行package.json中的start命令。对于非常基本的示例,如果以下是package.json中的start脚本
它将在控制台上简单地打印“Hello”
如果使用CRA创建React应用程序,则通常会在此部分中使用"react-scripts start"。 它设置开发环境并启动服务器,以及热模块重新加载
这就是在这种情况下为什么您不会出现错误的原因。
any.js
中没有代码启动服务器,您将不会收到错误。Node是一个JavaScript解释器,只要在脚本中放置的JS有效,就不会出现错误。相反,您将得到它产生的任何输出。在any.js
的情况下,如果它是空的,您将得不到任何输出。这是非常重要的区别。我觉得你把JavaScript框架/库和Node.js混淆了,它们是两个完全不同的东西。Node运行JavaScript代码,React是一个在JavaScript中执行操作的库。对于寻找信息的人来说,这是一个重要的区别。 - dudewad
npm start
会查找你的 package.json 文件中的start
脚本。它可能是一个不同的脚本,而不仅仅是 app.js。请尝试查看 package.json 文件。 - hassansin