【问题标题】:Environment variable are undefined inside the child/imported file in node/express在 node/express 的子/导入文件中未定义环境变量
【发布时间】:2020-12-09 02:43:44
【问题描述】:

我在我的 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

这就是我的目录结构的样子

【问题讨论】:

  • 您的项目根目录中是否有“env”文件?你的环境变量应该放在那里。
  • 是的 .env 存在于根目录中,这就是它在索引文件中工作的原因

标签: javascript node.js environment-variables es6-modules dotenv


【解决方案1】:

此评论的另一种解决方案:https://github.com/motdotla/dotenv/issues/133#issuecomment-255298822

将 dotenv 调用移动到单独的文件中,然后将其导入 index.js。

// index.js
import _ from './env'
import hello from './hello'
// env.js
import dotenv from 'dotenv'
dotenv.config({ silent: true })

图书馆也推荐 Create a separate file that will execute config first as outlined in this comment on #133https://www.npmjs.com/package/dotenv

【讨论】:

    【解决方案2】:

    您的 index.jsimporting api/controllers/shutterstock.js,并且导入被“提升”(在开始执行之前评估所有依赖项导入模块的),这会导致后者中的console.log之前被评估dotenv.config()被执行并加载了.env文件。

    您可以通过多种方式解决此问题:

    • 不要立即访问 shutterstock.js 中顶级模块范围内的 process.env,但例如仅在 downloadImage 函数内部。如果你在dotenv.config() 之后调用downloadImage(),它会起作用。

    • 延迟加载 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, getImages, downloadImage } from "./api/controllers/shutterstock";
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      • 2020-04-03
      • 2020-03-27
      • 2014-01-08
      • 2019-10-15
      • 1970-01-01
      相关资源
      最近更新 更多