首页 > 解决方案 > 在 Nest.js 中定义 Node 环境

问题描述

我正在设置 Nest.js 项目,我正在寻找定义 Node 环境的有效解决方案,该解决方案ConfigService用于加载环境变量:

import { Module } from '@nestjs/common';
import { ConfigService } from './config.service';

@Module({
    providers: [
        {
            provide: ConfigService,
            useValue: new ConfigService(`environments/${process.env.NODE_ENV}.env`)
        }
    ],
    exports: [ConfigService]
})
export class ConfigModule {}

现在我直接在 npm 脚本中定义它(例如"start:dev": "NODE_ENV=development nodemon"),但我想知道是否有更好的方法来处理不同的环境,而不是在每个脚本中附加它?

标签: javascriptnode.jstypescriptenvironment-variablesnestjs

解决方案


发展

如果应始终development将其设置为系统变量,请参阅下面的生产/暂存。如果你想在开发过程中运行不同的环境,附加你的 npm 运行脚本是一种方法。此外,您可以使用它cross-env来确保您的脚本在不同的平台上工作:

"start": "cross-env NODE_ENV=development ts-node -r tsconfig-paths/register src/main.ts",

测试

如果你想在不同的环境中运行你的集成测试,你可以在你的jest-e2e.json

"globals": {
  "NODE_ENV": "test"
}

也可以在测试代码中为一项特定测试设置(或更改)环境:

let previousNodeEnv;
beforeAll(() => {
  previousNodeEnv = process.env.NODE_ENV;
  process.env.NODE_ENV = 'test';
});

afterAll(() => process.env.NODE_ENV = previousNodeEnv);

制作/分期

在暂存或生产系统上,我建议将其设置为普通系统变量,请参阅此线程


推荐阅读