我有一个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环境变量设置为"production“。语法解释请参见here。
poststart将在start之后自动运行,如here所述。
但是,poststart不会“继承”echo外壳环境变量,因此NODE_ENV命令不会回显任何内容。
我的生产代码稍微复杂一些,但我试图完成的是将NODE_ENV变量从“起点”传递到依赖脚本。关于如何做到这一点,有什么建议/最佳实践吗?
我不想在poststart中硬编码NODE_ENV,因为我可能想这样做:
NODE_ENV=development npm start我希望所有“顺着链条”的东西都继承相同的环境。
发布于 2016-05-10 22:49:51
您有几个选项:
"start": "NODE_ENV=${NODE_ENV:=production} node start-app.js && echo $NODE_ENV"env in poststart in production,比如pm2。pm2允许您使用NODE_ENV等设置定义特定于环境的json文件。在我们公司,我们使用pm2 (始终使用相同的启动命令)在不同的环境中成功运行我们所有的应用程序
发布于 2019-05-24 01:21:49
我就是这么做的,首先你需要安装两个dev依赖项
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-cmd版本10开始,如果要使用自定义环境文件路径,则需要指定-f标志
"env-cmd -f ./.config/prod.env cross-env-shell \"docker volume create $DOCKER_VOLUME\""发布于 2017-10-08 18:58:17
如果您有少量使用案例,请使用better-npm-run。对于小的情况,它工作得很好。不知何故,如果你有很多命令,而且很难管理。试试吧,batman-cli。良好地工作并处理大量与环境相关的问题
npm i -g batman-cli
https://stackoverflow.com/questions/37140799
复制相似问题