ConfigService 相对于 dotenv 的优势
ConfigService advantages over dotenv
使用@NestJS/Config 而不是使用 dotenv 检索 envvar 有什么优点(或缺点)吗?在这两种情况下,我都可以创建一个 class 来负责所有环境变量,但是我应该这样做吗?
我知道@NestJS/Config 在幕后使用 dotenv,但是有什么理由应该选择一个而不是另一个吗?
我的理解是使用 @nestjs/config
很容易将 config/envvars 作为项目中的模块进行管理。所以它可以很容易地在不同的地方交换:
例如如果您需要一组不同的配置进行测试,则不必实际修改 process.env.xxx 或使用不同的 .env 文件。
但是,如果您这样做,all/most 您的其他服务也需要使用此模式。如果您将所有其他服务都作为纯函数导出,那将不会很有帮助。
两大优势是能够使用 Joi 或 class-validator 或任何其他你想要的模式验证器来确保你的 env 值在开始时是正确的,然后再尝试访问它们运行时并出现错误。早期的反馈循环意味着以后更少的失败。另一个很大的优势是使用 DI 意味着它更容易(通常)在测试用例中模拟 env 变量值,而不是必须分配给 process.env
本身。速度也有轻微的改进,因为 Nest 缓存了值,所以如果你再次读取它,你不需要从 process.env
读取,但除此之外没有太多值得一提的。如果您不想使用它,请不要觉得您必须使用它。还有一个缺点是不能在装饰器
中使用ConfigService
使用@NestJS/Config 而不是使用 dotenv 检索 envvar 有什么优点(或缺点)吗?在这两种情况下,我都可以创建一个 class 来负责所有环境变量,但是我应该这样做吗?
我知道@NestJS/Config 在幕后使用 dotenv,但是有什么理由应该选择一个而不是另一个吗?
我的理解是使用 @nestjs/config
很容易将 config/envvars 作为项目中的模块进行管理。所以它可以很容易地在不同的地方交换:
例如如果您需要一组不同的配置进行测试,则不必实际修改 process.env.xxx 或使用不同的 .env 文件。
但是,如果您这样做,all/most 您的其他服务也需要使用此模式。如果您将所有其他服务都作为纯函数导出,那将不会很有帮助。
两大优势是能够使用 Joi 或 class-validator 或任何其他你想要的模式验证器来确保你的 env 值在开始时是正确的,然后再尝试访问它们运行时并出现错误。早期的反馈循环意味着以后更少的失败。另一个很大的优势是使用 DI 意味着它更容易(通常)在测试用例中模拟 env 变量值,而不是必须分配给 process.env
本身。速度也有轻微的改进,因为 Nest 缓存了值,所以如果你再次读取它,你不需要从 process.env
读取,但除此之外没有太多值得一提的。如果您不想使用它,请不要觉得您必须使用它。还有一个缺点是不能在装饰器
ConfigService