NestJS .env 文件未构建

Posted

技术标签:

【中文标题】NestJS .env 文件未构建【英文标题】:NestJS .env file doesn't get built 【发布时间】:2020-09-02 12:32:13 【问题描述】:

我在我的 NestJS 项目中使用 dotenv v8.2.0,它一直在我的生产环境中工作。我在我的新电脑上克隆了这个项目,在根文件夹中创建了一个带有正确变量的 .env 文件,但是 .env 文件现在没有内置到 dist 文件夹中。

.env 文件:

databaseHost=database-di... 
databasePassword=a3^U...

我的 main.ts 文件的设置(仅相关部分):

import  config  from 'dotenv';
import * as path from 'path';`

const ENV_FILE = path.join(__dirname, '..', '.env');
config( path: ENV_FILE );

当我记录 dotenv 配置函数时,我得到以下信息:


  error: Error: ENOENT: no such file or directory, open 'C:\Users\Jasper\***\dist\.env'
      at Object.openSync (fs.js:461:3)
      at Object.readFileSync (fs.js:364:35)
      at Object.config (C:\Users\Jasper\***\node_modules\dotenv\lib\main.js:96:29)
      at Object.<anonymous> (C:\Users\Jasper\***\dist\src\main.js:21:22)
      at Module._compile (internal/modules/cjs/loader.js:1176:30)
      at Object.Module._extensions..js (internal/modules/cjs/loader.js:1196:10)
      at Module.load (internal/modules/cjs/loader.js:1040:32)
      at Function.Module._load (internal/modules/cjs/loader.js:929:14)
      at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
      at internal/main/run_main_module.js:17:47 
    errno: -4058,
    syscall: 'open',
    code: 'ENOENT',
    path: 'C:\\Users\\Jasper\\***\\dist\\.env'
  

当我查看 dist 文件夹时,.env 文件确实没有被移植,而它过去总是可以工作的。在 .env 文件夹中记录变量会返回 undefined

有谁知道我做错了什么?

【问题讨论】:

【参考方案1】:

.env 文件不是 Typescript 或 javascript 文件,因此不会被 Typescript 移动。您可以使用nest-cli.jsonassets 属性来移动它,但是您需要确保提交您的.env 文件,这是一种不好的做法。相反,应该从项目根目录(与package.json 相同级别)读取.env 文件,并且每个环境都应该有自己的.env 文件以保护机密。

【讨论】:

好的,谢谢!我不知道,因为我对 TS & JS 很陌生。我现在将其配置为从根文件夹中提取它们并且确实有效。我们与 Kubernetes Secrets 合作,将密钥保存在 CI/CD 的 .env 文件中,因此无需提交文件 :)

以上是关于NestJS .env 文件未构建的主要内容,如果未能解决你的问题,请参考以下文章

NestJS 环境变量未定义

在 main.ts 中使用 .env 文件中的数据 - NestJS

如何在 Nestjs 中使用 .env 文件设置 Typeorm 的配置

NestJS 是不是使用 NODE_ENV?建议设置吗?

node nestjs添加全局变量

NestJS 控制器未映射