enable configuration containing complex javascript objects for create-react-app based applications
create-react-app has support for flat environment variables around a fixed set of predefined environments corrosponding to managed values of NODE_ENV
, this may be sufficient for your use-cases.
if your requirements involve environments outside of those supported and/or you wish to work with rich javascript objects for configuration, then this package may be of value to you.
-
create a folder called
config
at the root of your project and place files in it with the format and naming conventions described below. -
in your
package.json
scripts, invoke the binary to generate the value for theREACT_APP_CONFIG
environment-variable like so:
"scripts": {
"start": "REACT_APP_CONFIG=$(cra-config) react-scripts start",
"build": "REACT_APP_CONFIG=$(cra-config) react-scripts build",
"test": "REACT_APP_CONFIG=$(cra-config) react-scripts test",
"eject": "react-scripts eject"
}
- in your code, import the
cra-config
module as below to reference the configuration values:
import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
import config from 'cra-config';
class App extends Component {
render() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<p>
Edit <code>src/App.js</code> and save to reload.
</p>
<a
className="App-link"
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer"
>
Learn React
</a>
<p>
CONFIG = {config.someStringKey} // <--------------------- ta-dah!
</p>
</header>
</div>
);
}
}
export default App;
module.exports = {
someStringKey: "some-value",
someIntegerKey: 123,
someBooleanKey: true,
someObjectKey: {
someNestedStringKey: "some-nested-value"
},
someArrayKey: ["red", "white", "blue"]
};
this file would contain values to be used when the environment-variable CONFIG_ENV
is set to environment-name
.
for example,
lab.js
would be used when theCONFIG_ENV
environment-variable is set tolab
this file would contain values to be used across all environments, or those which should be defaulted if not provided in environment specific files.
the key/values in this file would always be present unless overridden by an environment specific file
this would be used to customize default values for local usage
add
config/local.js
to your.gitignore
file