Environment config
It is common to have multiple environments. For this project, we will have:
Local to run on our machine for development.
CI for automated tests.
Staging to check if everything is working in the cloud. This can also be used to show a feature to someone before pushing it live.
Production where we host our app.
Config folder
Let's create a folder that contains the configurations for each environment. We will also have a shared.tsfile for things common to all environment and index.ts to return the correct object.
.
βββ config
βββ ci.ts
βββ index.ts
βββ local.ts
βββ production.ts
βββ shared.ts
βββ staging.tsimport { SharedConfig } from "./shared";
import { local } from "./local";
import { ci } from "./ci";
import { staging } from "./staging";
import { production } from "./production";
export interface Config extends SharedConfig {
env: "local" | "ci" | "staging" | "production";
}
export const config: Config = { local, ci, staging, production }[
process.env.CONFIG_ENV || "local"
];import { sharedConfig } from "./shared";
import { Config } from "./index";
export const local: Config = {
...sharedConfig,
env: "local"
};For now, there isn't much difference between our files. It will grow as we start adding features.
Note that we use
CONFIG_ENVinstead ofNODE_ENV. This is because some libraries and node itself behave differently when you setNODE_ENV=production. We want our environment to be as close as possible to each other.
Let's try this out:
Never commit secrets to git. Always use environment variable.
Making it work on Windows
We want each member of the team to be able to work in the environment they are the most comfortable. Most developers in the industry are using MacOS but this doesn't mean we should ignore other operating system.
The cross-env library allows us to run the same command on Unix and Windows.
This should now work everywhere:
DotEnv file
As our app growths, we will have to set more and more environment variables.
To keep this clean, we will store them in a .env file.
Don't forget to add .env to .gitignore as it will contain secrets.
Last updated
Was this helpful?