实际开发过程中需要对项目环境进行配置,基本环境通常会有测试环境和开发环境。
nest 提供了@nestjs/config包方便我们对环境进行配置
废话不多说,实操步骤如下。
本设置基于文章NESTJS 服务化架构设计和项目搭建中的结构进行设计和实现
安装依赖
npm i --save @nestjs/config
添加配置
为了使配置文件能够进行共享和避免反复配置,将config配置在lib目录下
目录结构如下
├── apps
│ ├── dm
│ ├── ge
│ └── jsf
├── libs
│ └── common
│ ├── src
│ │ ├── config
│ │ │ ├── config.module.ts
│ │ │ └── env
│ │ │ ├── common.ts
│ │ │ ├── development.ts
│ │ │ ├── index.ts
│ │ │ └── production.ts
│ │ └── index.ts
│ └── tsconfig.lib.json
- common.ts:放置公共配置
- development.ts:放置开发环境配置
- production.ts:放置线上环境配置
根据环境变量读取配置
- libs/common/src/config/env/index.ts
import developmentConfig from './development';
import productionConfig from './production';
import commonConfig from './common';
const configs = {
development: developmentConfig,
production: productionConfig,
};
const env = process.env.NODE_ENV || 'development';
export default () => ({
...commonConfig,
...configs[env],
});
创建配置模块
引入自定义配置,因为是公共模块,设置 isGlobal=true
- libs/common/src/config/config.module.ts
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import customConfig from './env';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true, // 作用于全局
load: [customConfig], // 加载自定义配置项
}),
],
})
export class configModule {}
调用配置参数
- apps/ge/src/ge.service.ts
import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
@Injectable()
export class GeService {
constructor(private configService: ConfigService) {}
getConfig() {
this.configService.get<string>('port');
}
}