我对Node非常陌生,并试图了解应用基础知识。我很好奇为什么这两个命令:
节点app.js
- VS -
npm start
向控制台输出相同的内容并且似乎继续“监听”,但为什么当我尝试访问http://localhost:3000时,我只在运行第一个命令时获得404。
我看到Express 4似乎有不同的应用程序结构,但为什么一个成功侦听而另一个没有,尽管在控制台中有相同的行为?
任何解释都有帮助。谢谢!
答案 0 :(得分:40)
这两个命令不一定相同。 npm start
运行任何'start'脚本配置说要按'package.json'中的定义运行,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"
}
....
}
我首先检查“启动”脚本设置为运行的内容,然后尝试直接在CLI中运行相同的命令,而不是通过NPM查看差异的位置。
但是为什么一个成功地听,而另一个没有
如果服务器返回404,则表示服务器正在侦听,但文档根目录或访问权限未正确设置,因此返回“未找到文件”响应。
答案 1 :(得分:8)
除了上面的答案外,我想补充一点:
在您的npm start
中没有scripts
部分的情况下执行package.json
会导致 npm
在该目录中寻找server.js
,如果找到,则使用node server.js
运行它,否则它将抛出 npm ERR! missing script: start
作为错误消息。
答案 2 :(得分:1)
我想补充的内容可能对将来的受众有所帮助
首先
节点-是任何JavaScript代码的运行时间
NPM是软件包管理器,可用于下载/更新/运行软件包以及更多内容,由3项组成
阅读here,了解它为您所做的一切。
节点any.js -这将仅运行javascript文件“ any,js”。因此,如果那里没有启动服务器的代码,则会出现错误
npm start -将在package.json中运行启动命令。对于非常基本的示例,如果下面是package.json
中的启动脚本,它将仅在控制台上打印“ Hello”。
如果您使用CRA创建react应用,则通常在此部分中显示“ react-scripts start ”。设置开发环境并启动服务器以及热模块重新加载
这就是您在这种情况下不会出错的原因