Appearance
Config
用于获取本地配置和环境值。
TIP
目前为本地插件,稳定后考虑单独发布包。
安装
bash
pnpm install --save @vivy-common/config
开始
导入模块
ts
// app.module.ts
import * as path from 'path'
import { Module } from '@nestjs/common'
import { ConfigModule } from '@vivy-common/config'
@Module({
imports: [
ConfigModule.forRoot({
cwd: path.join(__dirname, 'config'),
}),
],
})
export class AppModule {}
json
// nest-cli.json
{
"$schema": "https://json.schemastore.org/nest-cli",
"collection": "@nestjs/schematics",
"sourceRoot": "src",
"compilerOptions": {
"assets": ["**/*.yaml"],
"watchAssets": true
}
}
配置文件
以上配置将从 config
目录按顺序加载并解析下列文件。
bash
config.yaml # 所有情况下都会加载
config.local.yaml # 所有情况下都会加载,应被 git 忽略
config.[env].yaml # 只在指定环境下加载
config.[env].local.yaml # 只在指定环境下加载,应被 git 忽略
yaml
server:
port: 3010
name: config
环境变量从
process.env.NODE_ENV
设置,没有设置默认为development
。配置文件
**.local.yaml
被设计为本地个性化配置,你应该将**.local.yaml
添加到你的.gitignore
中,以避免它们被git
检入。
使用
注入实例
ts
import { Injectable, OnModuleInit } from '@nestjs/common'
import { ConfigService } from '@vivy-common/config'
@Injectable()
export class AppService implements OnModuleInit {
constructor(private config: ConfigService) {}
onModuleInit() {
this.config.get()
this.config.get<number>('service.port')
this.config.get<number>('service.port', 3000)
}
}
模板编译
通过 handlebars.js 编译。
模板:
bash
# 自动添加 process.env 对象到编译上下文中
process.env.SERVICE_ID = 'your-service-id'
process.env.SERVICE_NAME = 'your-service-name'
yaml
service:
id: ${{ SERVICE_ID }}
name: ${{ SERVICE_NAME }}
port: 3000
address: http://${{ service.name }}:${{ service.port }}
结果:
yaml
service:
id: your-service-id
name: your-service-name
port: 3000
address: http://your-service-name:3000