【问题标题】:Defining Node environment in Nest.js在 Nest.js 中定义 Node 环境
【发布时间】:2019-08-01 05:47:48
【问题描述】:

我正在设置 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"),但我想知道是否有更好的方法来处理不同的环境,而不是在每个脚本中附加它?

【问题讨论】:

    标签: javascript node.js typescript environment-variables nestjs


    【解决方案1】:

    发展

    如果它应该始终为development,只需将其设置为系统变量,请参阅下面的Production / Staging。如果你想在开发过程中运行不同的环境,附加你的 npm run 脚本是一种方法。此外,您可以使用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);
    

    制作/分期

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

    【讨论】:

      【解决方案2】:

      没有跨环境,你可以使用:

      "start:local": "NODE_ENV=test ts-node -r tsconfig-paths/register src/main.ts "
      

      【讨论】:

        猜你喜欢
        • 2018-12-02
        • 1970-01-01
        • 2021-07-11
        • 2020-12-09
        • 1970-01-01
        • 2018-07-09
        • 2018-01-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多