npm start 与节点 app.js
Posted
技术标签:
【中文标题】npm start 与节点 app.js【英文标题】:npm start vs node app.js 【发布时间】:2015-09-30 10:58:35 【问题描述】:我对 Node 非常陌生,并试图了解应用程序的基础知识。我很好奇为什么这两个命令:
节点 app.js
--vs--
npm 开始
将相同的内容输出到控制台并似乎继续“侦听”,但为什么当我尝试访问 http://localhost:3000 时,只有在运行第一个命令时才得到 404。
我看到 Express 4 似乎具有不同的应用程序结构,但为什么一个成功侦听而另一个没有,尽管控制台中的行为相同?
任何解释都是有帮助的。谢谢!
【问题讨论】:
npm start
查看 package.json 中的 start
脚本。它可能是与 app.js 不同的脚本。尝试查看 package.json。
你能发布你的 app.js 和你的 package.json 的相关部分吗?
Relevant link
Difference between `npm start` & `node app.js`, when starting app?的可能重复
【参考方案1】:
这两个命令不一定相同。 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,则表明服务器正在侦听,但文档根目录或访问权限未正确设置,因此它返回“未找到文件”响应。
【讨论】:
知道什么,你是对的。我终于弄明白了,我有点迷失方向,因为我来自过度使用 grunt 的 FE 自动化世界。基本上,./bin/www 文件现在是服务器的引导程序,而在旧版本的 express 中并非如此。谢谢你帮助我理解。基本上我知道 app.js 并没有完全引导应用程序,但它正在做诸如 mongodb 连接之类的事情,这就是我看到控制台日志的原因。新的快速规范是使用 ./bin/www 来执行所有引导(我喜欢它;它看起来更干净)。 +1 谢谢!! @dudewad 是不同于“main”字段的任何形式的“启动脚本”。因为根据 npm 文档,他们似乎都实现了同样的目标...... 我不确定主字段的作用。我了解到的是你的 package.json 的“脚本”部分是当你输入“npm run [somescript]”时搜索的内容。我认为 start 在这种情况下是一个别名。【参考方案2】:除了上面的答案,我想补充一点:
在package.json
中没有scripts
部分的情况下执行npm start
将导致npm
在该目录中寻找server.js
,如果找到则使用node server.js
运行它,否则它'将抛出 npm ERR! missing script: start
作为错误消息。
文档:npm-start
【讨论】:
完美地完成了它。我在找这个!【参考方案3】:我想补充一些东西,可能会对未来的观众有所帮助
首先
节点 - 是任何 javascript 代码的运行时间
NPM 是包管理器,可用于下载/更新/运行包等等,由 3 部分组成
-
网站
npm CLI
注册表
阅读here,了解它为您做了什么。
node any.js - 这将简单地运行 javascript 文件“any,js”。所以如果里面没有启动服务器的代码,就会报错
npm start - 将在 package.json 中运行 start 命令。对于非常基本的示例,如果下面是您的 package.json 中的启动脚本
它只会在控制台上打印“Hello”。
如果您使用 CRA 创建 React 应用程序,您通常会在此部分中显示“react-scripts start”。其中设置开发环境并启动服务器,以及热模块重新加载
这就是你在这种情况下不会出错的原因
【讨论】:
any.js
中没有启动服务器的代码不会报错。 Node 是一个 Javascript 解释器,所以只要你在该脚本中放入的任何 JS 都是有效的,你就不会出错。相反,您将获得它产生的任何输出。在any.js
的情况下,如果它为空,您将不会得到任何输出。这是一个非常重要的区别。我觉得您将 Javascript 框架/库与 Node.js 混为一谈,这是两个完全不同的东西。 Node RUNS javascript 代码,React 是一个在 JAVASCRIPT 中做东西的库。对于寻找信息的人来说,这是一个重要的区别。以上是关于npm start 与节点 app.js的主要内容,如果未能解决你的问题,请参考以下文章
如何启动节点服务器并导出 NODE_PATH(使用 npm start 或内联命令)
用supervisor开启nodejs express框架的app.js出现这个问题!用npm start 可以启动工程!