26

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

4

4 回答 4

19

您应该能够将 NPM 的 start 用作常规 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
于 2014-11-08T03:28:04.800 回答
11

nodemon 实际上会读取该package.start值,因此,如果您只是将start属性设置为您在生产中拥有的属性,例如node app.js,然后在没有任何参数的情况下运行 nodemon,它将package.start按照您在开发中的预期运行并重新启动。

于 2014-12-06T08:58:45.437 回答
8

我喜欢丹尼尔的解决方案,但认为将它放在单独的文件中会更干净,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"
},
于 2017-01-04T16:31:53.367 回答
6

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

于 2019-07-03T07:45:29.577 回答