我有一个 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 许可协议
我就是这样做的,首先你需要安装两个开发依赖项
https://www.npmjs.com/package/env-cmd 这从您的文件中加载您的环境变量
https://www.npmjs.com/package/cross-env 这个在脚本中使用环境变量
示例脚本:
这从 prod.env 加载 $DOCKER_VOLUME env var
更新:从 env-cmd 版本 10 开始,如果要使用自定义 env 文件路径,则需要指定 -f 标志