92

我在根文件夹文件中有 .env 文件

NODE_ENV=development
NODE_HOST=localhost
NODE_PORT=4000
NODE_HTTPS=false
DB_HOST=localhost
DB_USERNAME=user
DB_PASSWORD=user

并在文件夹server.js中归档。root/app/config/server.js文件的第一行server.js

require('dotenv').config();

我还尝试了以下操作:

require('dotenv').config({path: '../.env'});

require('dotenv').config({path: '../../.env'});

但是,当我从命令提示符server.js运行文件时,未加载我的 env 变量

node root/app/config/server.js

如果我使用视觉工作室并按F5,它会加载!!

我不确定我做错了什么,我错过了什么。任何建议都非常感谢。谢谢。

4

16 回答 16

128

怎么用require('dotenv').config({path:__dirname+'/./../../.env'})

您的问题似乎是执行路径。

于 2017-02-20T02:06:26.203 回答
56

这解决了我在 Node 中的问题v8.14.1

const path = require('path')
require('dotenv').config({ path: path.resolve(__dirname, '../.env') })

简单地做require('dotenv').config({path:__dirname+'/./../../.env'})导致一个位置被解析为/some/path/to/env/./../../.env

于 2019-01-13T09:36:49.143 回答
22

这是一个单行解决方案:

require('dotenv').config({ path: require('find-config')('.env') })

这将递归父目录,直到找到要使用的 .env 文件。

您也可以选择使用受上述单线启发的名为ckey的模块。

.env 来自主目录的文件。

# dotenv sample content
USER=sample@gmail.com
PASSWORD=iampassword123
API_KEY=1234567890

子目录中的一些js文件

const ck = require('ckey');

const userName = ck.USER;     // sample@gmail.com
const password = ck.PASSWORD; // iampassword123
const apiKey   = ck.API_KEY;  // 1234567890
于 2018-10-11T13:21:52.473 回答
15

如果您dotenv从嵌套文件中调用,并且您的.env文件位于项目根目录中,那么您想要连接这些点的方式是通过以下方式:

require('dotenv').config({path:'relative/path/to/your/.env'})
于 2017-12-27T23:25:09.700 回答
11

我遇到过这个问题,结果发现 REACT 只加载前缀为 REACT_APP_ 的变量

VueJs 可能有类似的问题,因为它期望变量前缀为:VUE_APP_

于 2020-09-29T00:20:03.213 回答
7

在您到达这一点的远程情况下,我的问题非常愚蠢:我错误地将我的环境变量命名为冒号“:”而不是等于“=”。菜鸟错误,但结果行为未加载拼写错误的变量赋值。

# dotenv sample content

# correct assignment
USER=sample@gmail.com

# wrong assignment (will not load env var)
USER : sample@gmail.com
于 2020-10-29T15:01:50.763 回答
6

@DavidP's answer notes 中的评论之一记录了 dotenv.config 的输出

console.log(require("dotenv").config())

这将输出配置日志并显示错误。在我的情况下,它表明配置方法引用的是当前目录,而不是包含我的 .env 文件的父目录。我可以参考以下内容

require('dotenv').config({path: '../.env'})
于 2021-03-26T00:18:04.483 回答
4

尝试这个:

const dotenv = require('dotenv');
dotenv.config({ path: process.cwd() + '/config/config.env' });

为我工作,我知道如何?

于 2021-03-01T07:29:38.257 回答
3

这为我解决了这个问题:

const path = require('path');
require('dotenv').config({
  path: path.resolve('config.env'),
});
于 2020-11-12T19:06:00.753 回答
3

确保.env在入口文件的开头加载(例如index.jsserver.js)。有时,执行顺序会在服务启动后加载环境变量。而且,通过使用__dirname,它可以很容易地指向相对于当前文件所需的文件。

这里我的项目结构是这样的。

.
├─ src
│  └─ index.ts
└─ .env
// index.ts
import dotenv from 'dotenv';
import path from 'path';

dotenv.config({path: path.join(__dirname, '..', '.env')});

...
于 2021-10-24T07:17:17.543 回答
3

您可以先使用console.log(require('dotenv').config()). 在我的场景中,我的 .env 文件位于根目录中,我需要在嵌套目录中使用它。结果给了我{ parsed: { DATABASE_URL: 'mongodb://localhost/vidly', PORT: '8080' } }。所以我只是解析结果并将其存储在一个变量const dotenv = require('dotenv').config().parsed;中。然后像 JS 对象一样访问我的 DATABASE_URL:dotenv.DATABASE_URL

于 2021-11-28T11:26:57.793 回答
1

有一次我遇到了同样的问题。Dotenv 没有加载 .env 文件。我尝试使用路径配置解决此问题,将 .env 文件放在根文件夹中,将 .env 放在文件正在运行的文件夹中,但没有任何帮助。然后我只是删除了 Node_modules 文件夹,重新安装所有依赖项,它可以正常工作

于 2020-02-17T16:22:38.567 回答
1

就我而言.env,读得很好,但不是.env.local

package.json将名称更新.env.env.local( cp ./.env.local .env) 解决了问题:

  "myscript": "cp ./.env.local .env && node ./scripts/myscript.js"
于 2020-06-08T06:14:51.603 回答
1

我头疼了几下,将 require 语句的输出记录到控制台的提示真的很有帮助。console.log(require('dotenv').config());

原来我是从我的用户/目录运行我的应用程序,nodemon application_name/.这使得 dotenv 在我的主目录而不是应用程序的目录中查找 .env 文件。我懒得跳过一个cd,这花了我几分钟的时间。自我注意:为 cd 创建一个别名到应用程序的目录并运行它

于 2022-01-21T20:34:37.830 回答
0

我遇到了同样的问题,这就是我的工作代码最终的样子。我有一个单独的配置文件夹中的 .env 文件

const dotenv = require('dotenv');

dotenv.config({ path: './config/.env' });

于 2021-11-24T18:12:22.550 回答
-2

只需添加

require("dotenv").config();

到您的应用程序的索引,它将找到您的 .env 文件,然后您可以在代码中的任何位置使用 process.env.YOUR_ENV

于 2021-05-01T08:55:29.383 回答