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的主要内容,如果未能解决你的问题,请参考以下文章

节点。并且 npm start 不起作用

如何启动节点服务器并导出 NODE_PATH(使用 npm start 或内联命令)

用supervisor开启nodejs express框架的app.js出现这个问题!用npm start 可以启动工程!

@npm 通过节点脚本和节点箱在 Vue.js 中运行错误

从同一节点项目运行2个不同的容器

不带节点安装npm