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

Ale*_*lls 13 node.js npm nodemon

我想使用$>npm start它并使用"nodemon"进行开发,使用"node"进行生产.我不能把条件逻辑放在我的package.json文件中,那么最好的方法是什么呢?

Dan*_*iel 7

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

"scripts": {
  "start": "if [$NODE_ENV == 'production']; then node app.js; else nodemon app.js; fi"
}
Run Code Online (Sandbox Code Playgroud)

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

$ NODE_ENV='production' npm start
Run Code Online (Sandbox Code Playgroud)

或用于发展

$ NODE_ENV='development' npm start
Run Code Online (Sandbox Code Playgroud)

  • 这不适用于 Windows,但它可能适用于 Mac/Unix (2认同)

Rem*_*arp 5

nodemon实际上读取了package.start值,所以如果你只是将start属性设置为你在生产中所拥有的属性node app.js,那么运行nodemon而不带任何参数,它将package.start按照你在开发中的预期运行并重新启动.

  • 虽然这在您仅在全局范围内使用 nodemon 时很有用,但我认为这对您想键入 `npm start` 并让它在 `dev` 环境中运行 nodemon 并在 `production` 环境中运行 nodemon 的情况没有帮助. 下面带有条件 if 语句的答案似乎是实现这一目标的唯一方法。 (2认同)

Erf*_*rfa 5

我喜欢丹尼尔的解决方案,但认为把它放在一个单独的文件中会更加清晰startup.sh:

#!/bin/sh

if [ "$NODE_ENV" = "production" ]; then
  node src/index.js;
else
  nodemon src/index.js;
fi
Run Code Online (Sandbox Code Playgroud)

然后只需将package.json更改为:

"scripts": {
  "start": "../startup.sh"
},
Run Code Online (Sandbox Code Playgroud)


小智 5

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