在 NestJS 项目中,cross-env@nestjs/config 模块可以结合使用,以确保环境变量在不同操作系统上的一致性和方便的配置管理。cross-env 是一个用于跨平台设置环境变量的工具,特别适用于在不同的操作系统(如 Windows、macOS 和 Linux)上保持一致的环境变量设置。以下是如何在你的项目中使用 cross-env@nestjs/config 模块的详细步骤和示例。

1. 安装必要的依赖

首先,确保你已经安装了 cross-env@nestjs/config 模块:

npm install cross-env @nestjs/config

2. 配置 package.json 脚本

package.json 文件中,使用 cross-env 设置 NODE_ENV 和其他环境变量。以下是一个示例 package.json 文件:

{
  "name": "frame-nest",
  "version": "1.0.0",
  "scripts": {
    "start": "cross-env NODE_ENV=production nest start",
    "start:dev": "cross-env NODE_ENV=development nest start",
    "start:debug": "cross-env NODE_ENV=development nest start --debug",
    "start:prod": "cross-env NODE_ENV=production node dist/main",
    "build": "nest build",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:cov": "jest --coverage",
    "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand"
  }
}

3. 配置 .env 文件

确保你的项目中有多个 .env 文件,每个文件对应不同的环境。例如:

  • .env.development
  • .env.production

示例 .env.development

PORT=3000
DB_HOST=localhost
DB_PORT=3306
NODE_ENV=development
API_KEY=your_development_api_key

示例 .env.production

PORT=8080
DB_HOST=production-db-host
DB_PORT=3306
NODE_ENV=production
API_KEY=your_production_api_key

4. 配置 ConfigModule

在你的 AppModule 中配置 ConfigModule,以便读取相应的 .env 文件。以下是一个示例 app.module.ts 文件:

import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { AppController } from './app.controller';
import { AppService } from './app.service';
@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true, // 使 ConfigModule 全局可用
       envFilePath: [`.env.${process.env.NODE_ENV || 'development'}`, '.env'], 
      // 根据 NODE_ENV 加载相应的 .env 文件,前方配置会覆盖后方,故可以都使用的配置放到.env文件
    })
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

5. 使用 ConfigService 读取环境变量

在你的服务或控制器中,注入 ConfigService 来读取环境变量。以下是一个示例 app.service.ts 文件:

import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';

@Injectable()
export class AppService {
  constructor(private configService: ConfigService) {}

  getHello(): string {
    const port = this.configService.get<string>('PORT');
    const dbHost = this.configService.get<string>('DB_HOST');
    const dbPort = this.configService.get<number>('DB_PORT');
    const nodeEnv = this.configService.get<string>('NODE_ENV');
    const apiKey = this.configService.get<string>('API_KEY');

    return `Hello World! Port: ${port}, DB Host: ${dbHost}, DB Port: ${dbPort}, Node Env: ${nodeEnv}, API Key: ${apiKey}`;
  }
}

总结

通过结合 cross-env@nestjs/config 模块,你可以在 NestJS 项目中方便地管理环境变量,并确保它们在不同操作系统上的一致性。以下是关键步骤:

  1. 安装依赖: 安装 cross-env@nestjs/config
  2. 配置 package.json 脚本: 使用 cross-env 设置 NODE_ENV 和其他环境变量。
  3. 配置 .env 文件: 包含不同环境的环境变量。
  4. 配置 ****ConfigModule: 在 AppModule 中配置 ConfigModule 以读取相应的 .env 文件。
  5. 使用 ****ConfigService: 在服务或控制器中注入 ConfigService 以读取环境变量。

通过这些步骤,你可以轻松地在 NestJS 项目中使用 cross-env@nestjs/config 模块来管理环境变量。

最后修改:2025 年 03 月 11 日
如果觉得我的文章对你有用,请随意赞赏