我基于这个 repo中的入门套件松散地构建了一个同构 React 应用程序。它使用 webpack 来构建生产代码。
问题是,我需要将服务器上的一些环境变量的值暴露给浏览器中的客户端代码,而不需要重新构建生产代码。我希望能够更改环境变量的值,并使其在客户端刷新下一页时产生效果,而无需重建任何内容。而且我不想为了做到这一点而使测试复杂化。
我找到了一些解决方案,但都不是很好:
- 使用 webpack 的 DefinePlugin 将某些环境变量的值硬编码到生产代码中。类似于此处概述的内容
- 构建一个 API 只是为了将环境变量拉入客户端。
- 在 webpack 系统之外编写一个特殊的 .js 文件。该文件将被模板化,以便在提供给客户端之前对其进行修改。可能需要将环境变量值存储在“窗口”或其他东西上的特殊全局变量中。
这些方法的问题:
- 被拒绝。这只是不符合我的要求。如果我更改了 env 变量的值,我需要重新构建代码。
- 不必要的复杂。我不需要这个 API 来做其他事情。一个完整的 API 只是为了提供 2 或 3 个很少更改的值?需要复杂性以确保在加载时尽快从 API 中提取值。
- 最接近,但有点恶心。如果可以避免的话,我真的不想离开 webpack/React/Flux 系统。在窗口对象上创建特殊的全局变量是可行的,但会增加测试使用这些全局变量的组件/存储/操作的复杂性。
过去我已经完成了 2 和 3,并且从未对这些解决方案真正感到满意。
有什么建议么?似乎这应该是一个常见/已解决的问题。也许我只是想多了,3是要走的路。