Description
Regarding this pull request around the improvements to environment variables, based on @gaearon's suggestion, I wanted to start a discussion on how to handle a docker-centric, 12 factor app-based workflow where environment variables are provided externally at runtime rather than at build time so that the exact same assets can be run in multiple environments.
Constraints / design goals mentioned is:
It's important though to note that CRA always produces static bundles, and they are expected to work in any environment regardless of server, container, etc.
In the past, I have implemented the following two solutions:
- render environment variables into the HTML and then hoist them into an application at initialization
- fetch environment variables from a server (for example, before creating the store and rendering the app with some static content during the initial fetch)
The first solution's benefit is that there is no delay before initial render, but with create react app dynamically modifying the html file, it becomes a little more tricky to implement since you would need to parse or search / replace within the rendered html before serving the file.
I'm just wondering if there is a better / best way to provide runtime environment variables to CRA applications and if we can get agreement on an approach, if it can be integrated into the CRA pipeline.
Thank you for all the great work and hoping for something awesome here! 🙏