首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在npm-scripts中传递环境变量

在npm-scripts中传递环境变量
EN

Stack Overflow用户
提问于 2016-05-10 22:01:23
回答 3查看 92.8K关注 0票数 56

我有一个package.json,在脚本密钥中包含以下(简化的)内容:

代码语言:javascript
复制
...
scripts: {
   "start": "NODE_ENV=${NODE_ENV:=production} node start-app.js",
   "poststart": "echo $NODE_ENV"
}
...

在命令行中,我可以运行:

代码语言:javascript
复制
npm start

这将运行我的start-app.js脚本并将process.env.NODE_ENV环境变量设置为"production“。语法解释请参见here

poststart将在start之后自动运行,如here所述。

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

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

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

代码语言:javascript
复制
NODE_ENV=development npm start

我希望所有“顺着链条”的东西都继承相同的环境。

EN

回答 3

Stack Overflow用户

发布于 2016-05-10 22:49:51

您有几个选项:

  • better-npm-run,可以为npm脚本的每个命令separately
  • Instead定义一个进程,您可以像这样连接npm的命令:"start": "NODE_ENV=${NODE_ENV:=production} node start-app.js && echo $NODE_ENV"
  • Use a env in poststart in production,比如pm2。pm2允许您使用NODE_ENV等设置定义特定于环境的json文件。在我们公司,我们使用pm2 (始终使用相同的启动命令)

在不同的环境中成功运行我们所有的应用程序

票数 26
EN

Stack Overflow用户

发布于 2019-05-24 01:21:49

我就是这么做的,首先你需要安装两个dev依赖项

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

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

示例脚本:

代码语言:javascript
复制
"env-cmd ./.config/prod.env cross-env-shell \"docker volume create $DOCKER_VOLUME\""

从prod.env加载$DOCKER_VOLUME环境变量

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

代码语言:javascript
复制
"env-cmd -f ./.config/prod.env cross-env-shell \"docker volume create $DOCKER_VOLUME\""
票数 6
EN

Stack Overflow用户

发布于 2017-10-08 18:58:17

如果您有少量使用案例,请使用better-npm-run。对于小的情况,它工作得很好。不知何故,如果你有很多命令,而且很难管理。试试吧,batman-cli。良好地工作并处理大量与环境相关的问题

npm i -g batman-cli

票数 -4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37140799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档