我正在设置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"
),但我想知道是否有更好的方法来处理不同的环境而不是在每个脚本中附加它?
如果它应该始终是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);
在暂存或生产系统上,我建议将其设置为正常的系统变量,请参阅this thread。