This is the 'main' config for all Meetup Web Platform applications. It is intended to consolidate both buildtime and runtime configuration properties and rules, including Babel and Webpack configuration, Node server config, and configuration needed to to interface with external services such as Travis CI and Transifex.
By consolidating all of this configuration into a single module/package, all downstream dependencies can explicitly opt-in to reading configuration values that determine the behavior of the system.
Important: browser-run scripts should never directly import configuration values. Instead, config should be read from the application state provided to the client on initial render.
The root-level modules of the config package each organize some information that
is used by many different packages. For the most part, they describe the
application environment, e.g. standard file paths
, env
values, and package
config values.
All Babel plugins and presets are defined in the /babel
module.
The /server
module defines the runtime configuration of the Node application
server. It is essentially an extension of the /env
config, but adds a few more
host and authentication configuration values.
Server config code uses node-convict for configuration management. The platform will automatically provide a base set of dev-friendly defaults for all non-secret values.
All default values can be overwritten via a local config file or environment vars. Using a config file is preferred in order to not interfere with other apps running in the same environment.
Configuration values are read in the following order of precedence:
- Environment variable
- Application root
config.<NODE_ENV>.json
file - Default value - see
server/index.js
Config files should be placed in the root of the application repo, and be named
with the format config.<target NODE_ENV>.json
, e.g.
config.test.json
(can be committed - should not contain secrets)config.development.json
(must be.gitignore
d)config.production.json
(must be.gitignore
d)
Although process.env
is typically only available in server-side code, our
bundling process can automatically inject certain environment values into the
client bundle wherever it finds a supported process.env.YOUR_ENV_VAR
expression.
Supported environment variables are declared using the
webpack.EnvironmentPlugin
in browserAppConfig