我正在将 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
import "dotenv/config.js";
对于所有文件中的
.env
变量,请使用上述内容。
尝试将环境配置放入单独的文件中,然后先导入它。
// loadEnv.js
import dotenv from 'dotenv';
dotenv.config()
// index.js
import './loadEnv';
import express from 'express';
let x = process.env.David;
console.log(x);
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";
// importing environmental variables
import express from 'express';
import { config } from "dotenv";
config({ path: process.ENV })
let x = process.env.David;
console.log(x);
如果您想在整个申请中拨打
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://www.npmjs.com/package/dotenv#how-do-i-use-dotenv-with-import