示例工程 GitHub
1 引入ConfigModule
工程创建好了之后,我们可以先使用 ConfigModule
. 使用ConfigModule
加载环境配置文件.env
,这样我们可以在工程刚开发时就预先留处的环境变量的位置,方便后续开发,减少部署时再修改造成的风险。环境变量包括运行端口号,数据库相关配置,公共变量,或者密钥或token等。
npm i --save @nestjs/config
# or
yarn add @nestjs/config
安装好依赖之后,在 app.module
中引入,代码如下
// src/app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [ConfigModule.forRoot()], // 新增代码在这里
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
默认加载工程根目录下的.env
文件,也可以加载指定文件,通常我会选择指定文件。
// src/app.module.ts
...
@Module({
imports: [ConfigModule.forRoot({
envFilePath: '.env.development',
})],
...
})
...
2 使用环境变量
变量使用就很简单,以修改默认端口为例, 如果没启动configmuodle,即使存在.env
文件也无法使用环境变量,会看到打印出undefined
。如果环境变量内有修改,需要重新运行工程才会
// src/main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
console.log(process.env.APP_PORT); // 打印端口 APP_PORT
await app.listen(process.env.APP_PORT);
}
bootstrap();
在 app.module
引入之后,其他功能模块也可以使用了。这是使用ConfigModule
最简单的方式, nest 方法来实现引入更为复杂的配置对象,或者只引用部分的环境配置文件的变量,已经在功能模块中使用ConfigService的方式好得控制使用。大家可以参考文档 configuration 了解其用法之后决定。