Config Dug
Config loader with support for AWS Secrets Manager.
Usage
Installation
yarn | npm |
---|
yarn add config-dug | npm install config-dug |
Create your config files
config-dug
looks in several places for your config, including config files in your project, environment variables and AWS Secrets Manager. config-dug
allows you to write your config files in either TypeScript or JavaScript. You are expected to export a default object from your config file:
export default {
API_ENDPOINT: 'https://api.kanye.rest/'
};
module.exports = {
API_ENDPOINT: 'https://api.kanye.rest/'
};
Environment specific config files are loaded based on the value of the APP_ENV
or NODE_ENV
environment variables. If APP_ENV
is present it will take precedence over NODE_ENV
.
Settings from these different sources are merged together into a single config object in the following order:
config.default.{ts|js}
config.${APP_ENV|NODE_ENV}.{ts|js}
config.${APP_ENV|NODE_ENV}.local.{ts|js}
config.local.{ts|js}
- AWS Secrets Manager
- Environment variables
By default your config files need to be placed in the root directory of your project. If you want to keep config files in a different directory see Customizing Config Loading.
Import config
Import config-dug
anywhere in your code where you want to access your config. All of your settings are available on the imported object:
import config from 'config-dug';
console.log(config.API_ENDPOINT);
const config = require('config-dug').default;
console.log(config.API_ENDPOINT);
:warning: You must use require('config-dug').default
in JavaScript files. If you exclude .default
Config Dug will not work.
Using AWS Secrets Manager
In order to use AWS Secrets Manager you have to add a AWS_SECRETS_MANAGER_NAME
or awsSecretsManagerName
setting to your config that specifies the name of the secret to look up:
export default {
AWS_SECRETS_MANAGER_NAME: 'production/myapp/config',
API_ENDPOINT: 'https://api.kanye.rest/'
};
In addition to specifying the secret name you can also provide a region using the AWS_SECRETS_MANAGER_REGION
or awsSecretsManagerRegion
setting. The connection timeout in milliseconds can also be specified using the AWS_SECRETS_MANAGER_TIMEOUT
or awsSecretsManagerTimeout
setting:
export default {
AWS_SECRETS_MANAGER_NAME: 'production/myapp/config',
AWS_SECRETS_MANAGER_REGION: 'us-west-2',
AWS_SECRETS_MANAGER_TIMEOUT: 2000
API_ENDPOINT: 'https://api.somecompany.com'
};
The default region is us-east-1
and the default connection timeout is 5000
ms.
This package uses the aws-sdk internally. Refer to their documentation for information about authentication, configuring a default region and configuring access control for AWS Secrets Manager.
Advanced
Customizing Config Loading
If you want to load config files from a directory other than the project root you can import the loadConfig
function and use it directly.
import { loadConfig } from 'config-dug';
loadConfig('config');
This will import your config files from the config
directory. The path you specify must be relative to your project root.
Debugging
config-dug
uses the debug library. To print debug messages for config-dug
set DEBUG=config-dug
.
Contributing
Running Tests
- Fork this repo
- Clone the forked repo
- Install dependencies:
yarn
- Run tests:
yarn test
Publishing
- Update the version in
package.json
- Add a
CHANGELOG
entry - Commit your changes
- Run
npm pack
to see what will be published then delete the .tgz
file that was created - Run
npm publish
- Create a release on GitHub. Use the version as the tag and release name. For example for version
1.0.0
the tag and release name would be v1.0.0
.
Credits
This project was inspired by config3 and config4.