Skip to content

环境变量配置

@nestjs/config 配置环境变量

安装:pnpm add @nestjs/config

安装:pnpm add cross-env -D

配置

在根模块需要导入 ConfigModule 模块

ts
import configuration from './config/configuration';

@Module({
  imports: [
    /* 什么都没有配置,会默认解析根目录下的 `.env` 文件 */
    ConfigModule.forRoot({
        /* envFilePath 可以指定配置文件路径(如果在多个文件中发现同一个变量,则第一个变量优先) */
        envFilePath: ['.env.development.local', '.env.development']
        /* 如果想在其他模块使用 ConfigModule模块时,可以将其声明为全局模块 */
        isGlobal: true
        /* 对于复杂的项目,可以利用自定义配置文件返回嵌套的配置对象。自定义配置文件导出一个工厂函数,该函数返回一个配置对象。配置对象可以是任意嵌套的普通 JavaScript 对象 */
        load: [configuration]
    }),
  ],
})

访问环境变量

自定义配置文件

ts
// config/configuration.ts
export default () => ({
  port: parseInt(process.env.PORT, 10) || 3000,
  database: {
    host: process.env.DATABASE_HOST,
    port: parseInt(process.env.DATABASE_PORT, 10) || 5432,
  },
});

ConfigModule 注册一个 ConfigService ,并将其导出为在其他消费模块中可见。可以使用 ConfigService 来访问环境变量。所以第一步我们需要导入模块、第二步注入服务、第三步使用服务来访问

导入模块

ts
// xxx.modules.ts
@Module({
  imports: [ConfigModule],
})

注入服务

ts
// xxx.service.ts
constructor(private configService: ConfigService) {}

访问环境变量

ts
this.configService.get<string>('XXX_XXX');

main.ts 文件中访问环境变量

ts
async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  // 获取 ConfigService 服务
  const configService = app.get(ConfigService);
  // 获得环境变量参数
  const DEFAULT_PORT = configService.get('port');
  await app.listen(DEFAULT_PORT);
}

cross-env 环境区分

cross-env 是一个运行跨平台设置和使用环境变量的脚本

如何使用

json
{
  "start:dev": "cross-env NODE_ENV=development nest start --watch",
  "start:debug": "cross-env NODE_ENV=debug nest start --debug --watch",
  "start:prod": "cross-env NODE_ENV=production node dist/src/main"
}

之后我们就可通过 process.env.NODE_ENV 访问到了

使用 Yaml 配置文件

安装:pnpm add yaml