Dotenv文件未加载环境变量

aiqt4smr  于 2022-09-18  发布在  Java
关注(0)|答案(20)|浏览(279)

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

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

root/app/config/server.js文件夹中的server.js文件。server.js文件的第一行是

require('dotenv').config();

我还尝试了以下几点:

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

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

  • 然而,当我从命令提示符运行server.js文件时,我的环境变量没有加载**

node root/app/config/server.js

如果我使用VISUAL STUDIO并按F5,它会加载!!

我不确定我做错了什么,错过了什么。任何建议都将受到高度赞赏。谢谢。

0s7z1bwu

0s7z1bwu1#

这就解决了我的问题:

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

x6h2sr282#

如果没有任何帮助,请将.env放在src文件夹之外(如果您的文件夹结构如下

-src/
  - index.js
  - env.js (where you call dotenv.config)
  // you may call dotenv.config anywhere but entry point is best.

.env (file outside the src folder)
i2byvkas

i2byvkas3#

我正在使用:

import findUp from 'find-up';
dotenv.config({ path: findUp.sync('.env') });
hs1ihplo

hs1ihplo4#

我犯了一个愚蠢的错误,我用冒号“:”代替了“=”

我在下面用过

用户:超级用户

但它应该是

用户=超级用户

myss37ts

myss37ts5#

如果您正在使用其他工具(全局安装)在某个地方调用您的配置文件,请仅使用绝对路径...

require('dotenv').config({
  path: '/path/to/my/project/.env',
});
pu3pd22g

pu3pd22g6#

您可能需要.env文件相对于启动应用程序的当前工作目录的路径。您可以按如下方式创建此路径:

const path = require('path')
require('dotenv').config({path: path.relative(process.cwd(), path.join(__dirname,'.env'))});

process.cwd()返回工作目录的绝对路径。
__dirname返回应用程序的绝对路径。
path.join()将.env文件的路径添加到应用程序的路径中。因此,如果您的.env文件嵌套得更深,只需添加文件夹(例如path.join(__dirname, 'config', 'secret','.env'))
path.relative()创建相对路径。

ukxgm1gy

ukxgm1gy7#

有一次我也遇到了同样的问题。Dotenv没有加载.env文件。我试着用路径配置来解决这个问题,把.env文件放在根文件夹中,把.env放在运行该文件的文件夹中,但没有任何帮助。然后我刚刚销毁了Node_MODULES文件夹,重新安装了所有依赖项,它工作正常

xriantvc

xriantvc8#

在我的例子中,.env读得很好,但不是.env.local

package.json命名为.env,更新为.env.local(cp ./.env.local .env)解决了问题:

"myscript": "cp ./.env.local .env && node ./scripts/myscript.js"
0yycz8jy

0yycz8jy9#

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

6ss1mwsb10#

您可以首先使用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

ef1yzkbh

ef1yzkbh11#

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

你的问题似乎出在执行路径上。

sbdsn5lh

sbdsn5lh12#

这让我摸不着头脑,而将REQUIST语句的输出记录到控制台的技巧真的很有帮助。console.log(require('dotenv').config());

原来我用nodemon application_name/.从我的用户/目录运行我的应用程序,这让dotenv在我的主目录中寻找.env文件,而不是应用程序的目录。我很懒,跳过了一个cd,这花了我几分钟的时间。

ma8fv8wu

ma8fv8wu13#

确保在条目文件的开头加载.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')});

...
nkoocmlb

nkoocmlb14#

试试这个:

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

为我工作过吗??

u4dcyp6a

u4dcyp6a15#

在到目前为止的远程情况下,我的问题相当愚蠢:我错误地将我的环境变量命名为冒号“:”而不是等号“=”。菜鸟错误,但导致的行为不是加载拼写错误的变量赋值。


# dotenv sample content

# correct assignment

USER=sample@gmail.com

# wrong assignment (will not load env var)

USER : sample@gmail.com

相关问题