nest中多配置
@nestjs/config
- 安装依赖
npm install --save @nestjs/config - 在根模块中引入
ConfigModule.forRoot() - 在需要使用配置的模块中引入
ConfigModule,并使用ConfigService获取配置
安装 cross-env,设置环境变量
- 安装
npm install --save cross-env - 在
package.json中配置启动命令 - 根目录创建
.env.env.develop.env.production文件,配置环境变量
"scripts": {
"start": "cross-env NODE_ENV=development nest start --watch",
"start:dev": "cross-env NODE_ENV=development nest start --watch",
"start:prod": "cross-env NODE_ENV=production nest start"
}
- 在 app.module.ts 中使用
ConfigModule.forRoot()配置环境变量 - 安装
npm i --save dotenv
import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import * as dotenv from 'dotenv'; // 引入 dotenv 模块
const envFilePath = `.env.${process.env.NODE_ENV || 'development'}`; // 根据环境变量加载不同的配置文件
@Module({
imports: [
// 配置模块
ConfigModule.forRoot({
isGlobal: true, // 设置为全局模块
envFilePath, // 加载配置文件
load: [() => dotenv.config({ path: '.env' })], // 加载自定义配置文件,这里是加载 .env 文件然后.env.development 文件如果相同的则会覆盖
// .env文件中
}),
],
controllers: [AppController],
providers: [AppService],
providers: [ConfigService, AppService],
})
export class AppModule {}
读取yaml配置
npm i --save js-yaml- 在根目录下创建
config文件夹,并在其中创建config.yaml文件 - 在
package.json中添加脚本 - 需要安装
npm i --save @nestjs/config cross-env lodash
"scripts": {
"start": "cross-env NODE_ENV=development nest start --watch",
"start:prod": "cross-env NODE_ENV=production node dist/main"
}
// configuration.ts 配置获取文件
// 读取配置文件
import { readFileSync } from 'fs';
import * as yaml from 'js-yaml';
import { join } from 'path';
import * as lodash from 'lodash';
const YAML_CONFIG_FILENAME = 'config.yaml';
const fileDefaultPath = join(__dirname, '../config', YAML_CONFIG_FILENAME); // 默认配置文件路径
const filePath = join(__dirname, `../config/${process.env.NODE_ENV}.yaml`); // 根据环境变量读取不同的配置文件
// 因为ConfigModule模块有一个load方法,所以这里用export default 一个函数,返回配置文件
export default () => {
// 合并默认配置文件和自定义配置文件
const defaultConfig = yaml.safeLoad(readFileSync(fileDefaultPath, 'utf8'));
const customConfig = yaml.safeLoad(readFileSync(filePath, 'utf8'));
return lodash.merge(defaultConfig, customConfig);
};
// app.module.ts
import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import Configuration from './configuration'; // 引入配置文件
const envFilePath = `.env.${process.env.NODE_ENV || 'development'}.yaml`; // 根据环境变量加载不同的配置文件
@Module({
imports: [
// 配置模块
ConfigModule.forRoot({
isGlobal: true, // 设置为全局模块
load: [Configuration], // 加载自定义配置文件
}),
],
controllers: [AppController],
providers: [AppService],
providers: [ConfigService, AppService],
})
export class AppModule {}
如果还需要对配置项进行校验需要 引入
joi库