【问题标题】:Dotenv Webpack - When I change the system environment variables on runtime, the changes is not affected on the appDotenv Webpack - 当我在运行时更改系统环境变量时,更改不会影响应用程序
【发布时间】:2020-04-01 15:28:10
【问题描述】:

我使用 react、webpack、docker 和 AWS 构建了一个 Web 应用程序。

我创建了一个依赖于环境变量的功能。因此,如果环境变量值为 true,则该功能将显示在前端。

问题是,当我更改服务器上的环境变量时(Webpack 已经构建了应用程序,应用程序已经部署并运行),我的功能没有显示。我猜是由于应用程序无法读取系统环境变量的值变化。

我怎样才能做到这一点?有可能吗?

=====

我使用 dotenv webpack 来管理我的环境变量。我已经将 systemvars 设置为 true 以检测系统或 .env 文件中的所有环境变量。

=====

那么我为什么要这样做,因为我不想发出拉取请求来推送环境变量的新值。我只想保留环境变量名称,如果该功能已准备好部署,则直接从服务器更改值。如果出现错误,我只需要将环境变量更改为某个东西,该功能就会关闭。

【问题讨论】:

  • 构建后,JavaScript 包已修复。如果你想改变服务器上的环境变量来改变行为,你需要服务器通过例如公开它。一个 API 端点,以便客户端可以使用配置并做出适当的响应。
  • 感谢您给了我如此深刻的见解。实际上,我在想 javascript 包是固定的,但我不确定。你能帮我找到这个固定捆绑包的任何参考吗?太感谢了。 @jonrsharpe
  • 你是什么意思“这个固定包的参考”?看看你在服务什么。
  • 对不起,我的意思就像一篇解释 javascript bundle 已修复的文章(固定示例是无法在运行时更改 env)。我只是想和我的同事分享。
  • 不能他们看看你的服务吗?一定要找一个,但我不知道如果 Webpacking 你的代码是一个要服务的 JS 文件,那么输出的适当参考是什么。

标签: javascript webpack environment-variables dotenv


【解决方案1】:

您根本无法更改环境变量。 Evn 变量在编译/webpack 加载时加载。因此,一旦应用启动,您就无法更改,process.env

@jonrsharpe 解释的解决方案。您需要创建某种数据库。它可以是内存或文件或数据库。你从中读取数据。公开一个 API,以更新数据库。

快递样本:

global.enableFeature = false

app.post("/updateFeatureToggle", (req, res) => {
  const enableFeature = req.body.enableFeature

  global.enableFeature = enableFeature
  res.send({success: "OK"})
})

在另一个文件中,从global.enableFeature 读取。这是基于内存的。

【讨论】:

  • 感谢基于内存的示例来解决这个问题。我想,我需要再次与我的团队讨论这个问题。
  • @SaddamHabibie 谢谢.. 请接受作为答案! :-D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-14
  • 2016-07-28
  • 1970-01-01
  • 2022-11-20
相关资源
最近更新 更多