使用dotenv配置nestjs

时间:2018-08-07 08:12:27

标签: configuration nestjs

请参阅本文档

https://docs.nestjs.com/techniques/configuration

建议使用ConfigServicorder oder来使用环境变量。

因此在代码中,我们使用类似以下内容的代码:

config.get('PORT')

所有变量都在.env文件中定义。

但是不建议在生产环境中使用.env。那么如何部署呢?

为什么不对dotenv和process.env.PORT使用标准方法?

3 个答案:

答案 0 :(得分:1)

  

但是不建议在生产环境中使用.env。那么如何部署呢?

实际上,不建议提交您的.env文件。在生产中使用它们非常好:-)。

  

为什么不对dotenv和process.env.PORT使用标准方法?

它允许您将核心代码与负责提供配置数据的代码解耦。因此:

  • 核心代码更易于测试:对 declare @term varchar(100) = 'abc~def~ghi~jkl~mno~pqr~' ; with mycte as ( select value as string_value , row_number() over (order by (select 1000) )as row_num from string_split(@term,'~')) select top 2 string_value from mycte where string_value<>'' order by row_num desc 进行一些手动更改/模拟是例如- a -痛苦 ,而嘲笑“ process.env”非常简单
  • 您可以想象在将来使用环境变量以外的任何方法,只需替换专用类中的一个方法(或几个getter),而不是替换代码中所有ConfigService的出现// // <公平地说,这不太可能发生,因为使用env。变量是加载配置数据的最常用方法,但仍然如此。

答案 1 :(得分:0)

有两个问题使ConfigService的使用率降低。

第一

在任何环境中均不存在.env文件时,在{p>

readFileSync

将失败:

dotenv.parse(fs.readFileSync(filePath))

即使[Nest] 63403 [ExceptionHandler] path must be a string or Buffer TypeError: path must be a string or Buffer at Object.fs.openSync (fs.js:646:18) at Object.fs.readFileSync (fs.js:551:33) at new ConfigService (../config/config.service.ts:8:38) 可用

process.env.API_KEY

将不返回任何内容。因此this.configService.get('API_KEY') 会迫使您使用ConfigService文件,而dotenv则建议您反对:

  

不。强烈建议您不要使用“主要” .env文件和   “ environment” .env文件,例如.env.test。您的配置应有所不同   部署之间,并且您之间不应共享价值   环境。

https://github.com/motdotla/dotenv#should-i-have-multiple-env-files

第二

您必须导入配置模块并注入服务才能使用它。当您使用这样的环境变量

prod.env

配置服务没用。

在此处了解有关环境中配置的更多信息:https://12factor.net/config

答案 2 :(得分:0)

使用 @nestjs/config(又名 ConfigModule)使您的应用可以使用环境变量,无论它们来自 .env 文件还是在环境中设置。在本地使用 .env 文件,在生产环境中使用。