In a rush?
If not - head over to the introduction.
# Installation
For yarn projects:
yarn add @app-config/main@2
For npm projects:
npm i @app-config/main@2
# Usage
You'll need a JSON Schema (opens new window) file before loading config. Add the file below to your project root.
.app-config.schema.yml
type: object
additionalProperties: false
required:
- server
- database
properties:
server: { $ref: '#/definitions/Server' }
database: { $ref: '#/definitions/Database' }
definitions:
Server:
type: object
additionalProperties: false
required: [port]
properties:
port: { $ref: '#/definitions/IpPort' }
Database:
type: object
additionalProperties: false
required: [host, port]
properties:
host: { type: string }
port: { $ref: '#/definitions/IpPort' }
database: { type: string }
IpPort:
type: integer
minimum: 0
maximum: 65535
Of course, you will want different options here. Build any JSON Schema that fits your use case.
Now, add an app-config file in the same directory.
.app-config.yml
server:
port:
$env:
default: 3000
production: 80
database:
host: localhost
port: 5432
database: my-app
You've now seen an example of $env
. This is governed by APP_CONFIG_ENV
, NODE_ENV
or ENV
.
Now try to load the configuration that you just wrote, using the app-config CLI.
$ npx @app-config/cli vars
APP_CONFIG_SERVER_PORT=3000
APP_CONFIG_DATABASE_HOST="localhost"
APP_CONFIG_DATABASE_PORT=5432
APP_CONFIG_DATABASE_DATABASE="my-app"
From here, setup instructions differ for Node.js vs Webpack vs React Native. As an example, here's how a simple Node.js app works.
my-app.ts
import { config, loadConfig } from '@app-config/main';
async function main() {
await loadConfig();
// anywhere in your app, after loadConfig is complete and resolved
console.log(config); // this is a JSON object, loaded from the YAML file
}
# Learn More
From this point on, there's lots to try out! Or, keep it simple and just use the basics.