@mediaedge4tw/nest-simple-config
v1.0.8
Published
nest-simple-config for nestjs module
Downloads
4
Readme
Description
a simple config module for Nest.
This configuration module can use JSON or YAML files as default settings and allow overriding these defaults at runtime using environment variables (similar to ASP.NET Core's Configuration).
Installation
npm i --save @mediaedge4tw/nest-simple-config
Quick Start
default configuration from file
appsettings.json
{
"a": "base",
"b": {
"c": 123
}
}
import in AppModule
import { DynamicModule, Module } from '@nestjs/common';
import { Configuration, SimpleConfigModule } from '@mediaedge4tw/nest-simple-config'
import { join } from 'path';
@Module({
imports: [
SimpleConfigModule.forRoot({
configFileOptions: {
filename: join(__dirname,'appsettings.json'),
}
})
],
})
export class AppModule {}
inject Configuration in other injectable class
@Injectable()
export class OtherService {
constructor(private readonly config: Configuration) {}
getA() {
return this.config.get('a'); // got a string: 'base'
}
getC() {
return this.config.get('b.c'); // got a number: 123
}
getSection() {
return this.config.get('b'); // got a object: { c : 123}
}
}
environment variables' runtime override (for Docker)
set environment variables
# prefix is NestApp, and object path delimiter is '__'
export NestApp__a='env'
export NestApp__b__c=789
import in AppModule, and set envConfig
import { DynamicModule, Module } from '@nestjs/common';
import { Configuration, SimpleConfigModule } from '@mediaedge4tw/nest-simple-config'
import { join } from 'path';
@Module({
imports: [
SimpleConfigModule.forRoot({
configFileOptions: {
filename: join(__dirname,'appsettings.json'),
},
envOptions: {
prefix: 'NestApp', // this is default value
},
})
],
})
export class AppModule {}
got override value
@Injectable()
export class OtherService {
constructor(private readonly config: Configuration) {}
getA() {
return this.config.get('a'); // got a string: 'env'
}
getC() {
return this.config.get('b.c'); // got a number: 789
}
}
array override mode
appsettings.json
{
"ary": [ 1, 2, 3 ]
}
appsettings.override.json
{
"ary": [ 11, 22 ]
}
import in AppModule, and set envConfig
import { DynamicModule, Module } from '@nestjs/common';
import { Configuration, SimpleConfigModule } from '@mediaedge4tw/nest-simple-config'
import { join } from 'path';
@Module({
imports: [
SimpleConfigModule.forRoot({
arrayMergeMode: 'all', // 'section' or 'all'
configFileOptions: {
filename: join(__dirname,'appsettings.json'),
},
envOptions: {
prefix: 'NestApp', // this is default value
},
})
],
})
export class AppModule {}
got override array
@Injectable()
export class OtherService {
constructor(private readonly config: Configuration) {
}
// if select 'section', ary is [11, 22, 3]
// if select 'all', ary is [11, 22]
getAry() {
return this.config.get('ary');
}
}
using ConfigurationBuilder
import { DynamicModule, Module } from '@nestjs/common';
import { Configuration, SimpleConfigModule, DefaultEnvOptions
,JsonConfigurationProvider, EnvConfigurationProvider } from '@mediaedge4tw/nest-simple-config'
import { join } from 'path';
@Module({
imports: [SimpleConfigModule.forRootWithConfigBuilder((builder) => {
builder.add(new JsonConfigurationProvider(join(__dirname, 'settings', 'appsettings.json')))
.add(new JsonConfigurationProvider(join(__dirname, 'settings', `appsettings.${process.env.NODE_ENV}.json`), true))
.add(new EnvConfigurationProvider({prefix: 'App'}));
})],
})
export class AppModule {}
Support
Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please read more here.