Node.js - nodemon vs node - 开发与生产

Posted

技术标签:

【中文标题】Node.js - nodemon vs node - 开发与生产【英文标题】:Node.js - nodemon vs node - development vs production 【发布时间】:2015-01-04 22:54:09 【问题描述】:

我想使用$>npm start 并让它使用“nodemon”进行开发,使用“node”进行生产。我不能将条件逻辑放在我的 package.json 文件中,那么如何最好地完成呢?

【问题讨论】:

* 当然,您可以将条件逻辑放在 package.json 脚本行中。这些脚本字符串值由 bash 简单解释。 为什么要将npm 放入生产环境中运行的东西中?这是您真正不需要的开销。 【参考方案1】:

您应该能够将 NPM 的启动用作常规 shell 脚本。

"scripts": 
  "start": "if [$NODE_ENV == 'production']; then node app.js; else nodemon app.js; fi"

现在启动您的服务器进行生产

$ NODE_ENV='production' npm start

或用于开发

$ NODE_ENV='development' npm start

【讨论】:

cool - 当我尝试嵌入在 package.json 文件中的 shell 脚本时,我得到了一个错误,但看起来之后的命令会有所帮助。我正在使用 heroku,所以我相信我必须在 heroku 上设置 env 变量 这不适用于 Windows,但它可能适用于 Mac/Unix 这对我来说抛出了错误[: development: unexpected operator。我不得不这样做if [$NODE_ENV = 'production']; then node app.js; else nodemon app.js; fi。有关上下文,请参阅***.com/a/18102991/100466。 与其拥有$ NODE_ENV='development' npm start,不如创建另一个脚本"dev":"nodemon app.js" 并拥有npm run dev【参考方案2】:

nodemon 实际上读取的是package.start 值,所以如果您只是将start 属性设置为您在生产中拥有的属性,例如node app.js,然后不带任何参数运行nodemon,它将与@987654324 一起运行@ 并按照您在开发中所期望的那样重新启动。

【讨论】:

虽然这在您仅在全局范围内使用 nodemon 时很有用,但我认为这对于您想要键入 npm start 并让它在 dev 环境中运行 nodemon 的情况没有帮助和production 中的节点。下面带有条件 if 语句的答案似乎是实现这一目标的唯一方法。 @AdamReis:有时会有一个问题询问如何做错事。这被称为 XY 问题,它不仅是可以接受的,而且鼓励 SO 以正确的方式回答 Y 而无需做 X。在这种情况下,OP 可能不知道 nodemon 实际是如何工作的,因此要求的东西没有必要。所以如果有更好的做事方法,就没有必要完成字面问题。【参考方案3】:

我喜欢 Daniel 的解决方案,但认为将其放在单独的文件中会更简洁,startup.sh

#!/bin/sh

if [ "$NODE_ENV" = "production" ]; then
  node src/index.js;
else
  nodemon src/index.js;
fi

然后将package.json改为阅读:

"scripts": 
  "start": "../startup.sh"
,

【讨论】:

我很好奇,你为什么在生产中使用node 而不是nodemon。谢谢。 因为 Nodemon 会在任何代码更改时自动重新启动服务器,如果发生意外或更改文件并出错,这在生产中不方便。如果节点用于生产,则必须重新启动以反映更改【参考方案4】:

不要将逻辑放在“开始”中,只需添加另一个脚本,如“start-dev”:“nodemon app.js”并像“npm run-script start-dev”一样执行它。

【讨论】:

以上是关于Node.js - nodemon vs node - 开发与生产的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 第三方模块 nodemon(自动编译)使用

无法安装 nodemon node.js

nodemon 没有在 webpack-typescript-node.js 中监视目录?

node工具之nodemon

Mac 上的 Node.js Heroku 部署 - sh: 1: nodemon: not found / npm ERR! `nodemon fileName.js`/npm 错误!在...启动脚

如何使用 Forever 和 Nodemon (Windows) 自动重启 Node.js 应用程序