无法将 dotenv 与 ES6 模块一起使用

问题描述 投票:0回答:5

我正在将 Express 应用程序从 CommonJS

require
语法移至 ES6 模块
import
语法。这很好,直到我尝试使用
dotenv
加载我的环境变量,并且每次我尝试访问这些变量时,它们都会以未定义的形式返回。

app.js

// importing environmental variables
import dotenv from 'dotenv';
dotenv.config();
import express from 'express';

let x = process.env.David;
console.log(x);

.env

David = test
javascript es6-modules dotenv
5个回答
36
投票
import "dotenv/config.js";

对于所有文件中的

.env
变量,请使用上述内容。


26
投票

尝试将环境配置放入单独的文件中,然后先导入它。

// loadEnv.js
import dotenv from 'dotenv';
dotenv.config()


// index.js
import './loadEnv';
import express from 'express';
let x = process.env.David;
console.log(x);

2
投票
import path from 'path';
import { fileURLToPath } from 'url';
import "dotenv/config.js";
    
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

dotenv.config({path:`${__dirname}/.env`});

我这样做是因为我的 .env 文件位于 src 文件夹中 (projectName/src/.env) 并且 dotenv 未检测到它。但实际上,将 .env 文件移动到项目文件夹 (projectName/.env) 并使用:

更容易
import "dotenv/config.js";

1
投票
 // importing environmental variables
        import express from 'express';
        import { config } from "dotenv";
        config({ path: process.ENV })
            
        let x = process.env.David;
        console.log(x);

0
投票

如果您想在整个申请中拨打

dotenv
一次
就像在
commonjs
中使用
require
一样。

特别是,如果您想更改配置,例如像这样更改 PATH:

config({ path: process.ENV })

您必须编写一个单独的文件,如下所示:

// env.js
import dotenv from 'dotenv';
dotenv.config({ path: process.ENV });

然后在主文件中导入

env.js
文件,如下所示:

// index.js
/** Import first before calling other files */
import './env.js';
import sqlConnect from './sql'
import express from 'express';

const PORT = process.env.PORT;

app.listen(PORT,()=>{
  console.log(`listening on port ${PORT}`);
})

注意! 在调用应用程序中的其他文件之前先导入。

因为在 ES6 中,

import
在代码执行之前执行。 您可以在这里查看更多内容:
https://hacks.mozilla.org/2015/08/es6-in-deep-modules/

来源:
https://www.npmjs.com/package/dotenv#how-do-i-use-dotenv-with-import

© www.soinside.com 2019 - 2024. All rights reserved.