我在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
型
这就是我的目录结构看起来像x1c 0d1x的样子
4条答案
按热度按时间ifmq2ha21#
您的 index.js 正在
import
上运行 API/controllers/shutterstock.js,并且导入被“提升”(在开始执行导入模块之前评估所有依赖项),这导致后者中的console.log
在执行**dotenv.config()
并加载.env
文件之前被评估**。您可以通过以下几种方式解决此问题:
process.env
,但例如只在downloadImage
函数内部。如果在dotenv.config()
之后调用downloadImage()
,它就可以工作。字符串
dotenv.config()
调用的模块-依赖项按顺序加载和评估。Dotenv已经有了这样一个模块:型
unhi4e5o2#
另一个解决方案形成此评论:https://github.com/motdotla/dotenv/issues/133#issuecomment-255298822
将dotenv调用移动到一个单独的文件中,然后将其导入index.js。
个字符
还建议从库
Create a separate file that will execute config first as outlined in this comment on #133
https://www.npmjs.com/package/dotenv中获取z2acfund3#
import { default as dotenv } from“dotenv”; dotenv.config({ path:'../.env' });当其他解决方案没有的时候,这对我很有效,尝试了单独的文件导入,以及这个线程中的其他所有内容,https://github.com/motdotla/dotenv/issues/133也尝试了其他堆栈文章,这篇文章用es6风格的导入进行了标准节点设置。
5f0d552i4#
确保require('dotenv ').config()位于index.js文件中所有文件导入的上方。基本上,导入序列(需要)