在npm-scripts中传递环境variables

我有一个package.json脚本键中的以下(简化)内容:

... scripts: { "start": "NODE_ENV=${NODE_ENV:=production} node start-app.js", "poststart": "echo $NODE_ENV" } ... 

从命令行我可以运行:

 npm start 

这将运行我的start-app.js脚本,并将process.env.NODE_ENV环境variables设置为“production”。 看到这里的语法解释。

开始后会自动运行,如此处所述。

但poststart不会“inheritance”NODE_ENV shell环境variables,所以echo命令不会回显任何内容。

我的产品代码稍微复杂一些,但是我试图完成的是将NODE_ENVvariables从“起点”传递给依赖脚本。 任何build议/最佳做法如何做到这一点?

我不想在poststart中硬编码NODE_ENV,因为我可能想这样做:

 NODE_ENV=development npm start 

我希望每一个“下链”都inheritance相同的环境。

你有几个select:

  • better-npm-run ,它可以分别为每个命令定义一个env
  • 您可以像下面这样连接npm的命令: "start": "NODE_ENV=${NODE_ENV:=production} node start-app.js && echo $NODE_ENV"
  • 在生产中使用像pm2一样的stream程pipe理器。 pm2可让您使用NODE_ENV等设置定义环境特定的json文件。 在我们公司,我们成功地运行了所有的应用程序在不同的环境下与pm2(同时具有相同的启动命令)

如果您使用的是小型的,请使用better-npm-run。 对于小的情况下,它工作正常。 不知何故,如果你有很多的命令,很难pipe理。 试试吧, 蝙蝠侠 。 很好地处理和处理很多与环境有关的问题

npm我-g batman-cli