在 npm-scripts 中传递环境变量

新手上路,请多包涵

我有一个 package.json,在 scripts 键中有以下(简化的)内容:

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

从命令行我可以运行:

 npm start

这将运行我的 start-app.js 脚本并将 process.env.NODE_ENV 环境变量设置为“生产”。有关语法说明,请参见 此处

poststart 将在启动后自动运行,如此 所述。

但是 poststart 不会“继承” NODE_ENV shell 环境变量,因此 echo 命令不会回显任何内容。

我的生产代码稍微复杂一些,但我想要完成的是将 NODE_ENV 变量从“起点”传递到依赖脚本。关于如何做到这一点的任何建议/最佳实践?

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

 NODE_ENV=development npm start

我希望每个“下游”都继承相同的环境。

原文由 Björn 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
1 个回答

我就是这样做的,首先你需要安装两个开发依赖项

https://www.npmjs.com/package/env-cmd 这从您的文件中加载您的环境变量

https://www.npmjs.com/package/cross-env 这个在脚本中使用环境变量

示例脚本:

 "env-cmd ./.config/prod.env cross-env-shell \"docker volume create $DOCKER_VOLUME\""

这从 prod.env 加载 $DOCKER_VOLUME env var

更新:从 env-cmd 版本 10 开始,如果要使用自定义 env 文件路径,则需要指定 -f 标志

"env-cmd -f ./.config/prod.env cross-env-shell \"docker volume create $DOCKER_VOLUME\""

原文由 Acid Coder 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题