Zai*_*een 3 javascript environment-variables node.js es6-modules dotenv
我在我的 node/express 项目中使用dotenv包。
我有一个根/索引文件,我在其中导入不同的文件。
我仅在索引文件中导入 dotenv 。索引文件中的环境变量是可以访问的,但在导入的文件中这些环境变量是不可访问的。如何使其可以在 indes.js 中导入的其他文件中访问?
这是我的代码的一瞥
索引.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
Run Code Online (Sandbox Code Playgroud)
api/controllers/shutterstock.js
console.log(process.env.SHUTTERSTOCK_ACCESS_TOKEN); //===>undefined
Run Code Online (Sandbox Code Playgroud)
您的index.js正在importapi /controllers/shutterstock.js,并且导入被“提升”(在开始执行导入模块之前评估所有依赖项),这导致后者在执行之前console.log被评估并具有加载文件。 dotenv.config().env
您可以通过多种方式解决此问题:
不要立即在shutterstock.jsprocess.env的顶级模块范围中访问,而只能在函数内部访问。如果你在之后调用,它就会起作用。downloadImagedownloadImage()dotenv.config()
将shutterstock.js的加载推迟到dotenv初始化之后:
import dotenv from "dotenv";
dotenv.config();
const { sync, getImages, downloadImage } = await import("./api/controllers/shutterstock");
Run Code Online (Sandbox Code Playgroud)
导入一个在Shutterstock.jsdotenv.config()模块之前执行调用的模块- 依赖项按顺序加载和评估。Dotenv 已经附带了这样的模块:
import "dotenv/config";
import { sync, getImages, downloadImage } from "./api/controllers/shutterstock";
Run Code Online (Sandbox Code Playgroud)