问题描述
我在我的node / express项目中使用 dotenv 软件包。
我仅在索引文件中导入了dotenv。在索引文件环境变量中可以访问这些变量,但是在导入的文件中不能访问它们。 如何使它在indes.js中导入的其他文件中可访问?
以下是我的代码
index.js
import dotenv from "dotenv";
dotenv.config();
import { sync,getimages,downloadImage } from "./api/controllers/shutterstock";
console.log(process.env.SHUTTERSTOCK_ACCESS_TOKEN); //===>Working gives me the access token
api / controllers / shutterstock.js
console.log(process.env.SHUTTERSTOCK_ACCESS_TOKEN); //===>undefined
解决方法
您的 index.js import
正在 api / controllers / shutterstock.js 中,并且导入已“悬挂”(在开始之前先评估所有依赖项)导入模块的执行),这会导致在导入后的console.log
在 执行之前dotenv.config()
进行评估并加载了.env
文件。>
您可以通过以下几种方法解决此问题:
-
不要立即访问 shutterstock.js 的顶级模块范围中的
process.env
,但例如仅在downloadImage
函数内部。如果您在downloadImage()
之后致电dotenv.config()
,它将可以使用。 -
将 shutterstock.js 的加载推迟到dotenv初始化之后:
import dotenv from "dotenv"; dotenv.config(); const { sync,getImages,downloadImage } = await import("./api/controllers/shutterstock");
-
导入一个模块,该模块在 shutterstock.js 模块之前执行
dotenv.config()
调用-依序加载和评估依赖项。已经Dotenv comes with such a module:import "dotenv/config"; import { sync,downloadImage } from "./api/controllers/shutterstock";