【问题标题】:process.env doesn't show variables outside app.jsprocess.env 不显示 app.js 之外的变量
【发布时间】:2020-04-14 03:05:41
【问题描述】:

app.js

    import koa from 'koa';
    import http from 'http';
    import logger from 'koa-logger';
    import koaBody from 'koa-body';
    import dotenv from 'dotenv';
    import dotenvExpand from 'dotenv-expand';

    const config = dotenv.config();

    dotenvExpand(config);

    console.log(process.env); // Here I see all data which are in my .env file

    import { client } from '@pg'; // Inside this file I doesn't see this , but it still after initializing dotenv

@pg = db/connection/index.js

import { Client } from 'pg';

console.log(process.env.DATABASE_URL, 'fds'); // here I don't see the same ( all variables from .env file are undefined)

export const client = new Client({
  connectionString: process.env.DATABASE_URL
});

如果您需要更多信息,请告诉我。注意我在代码 sn-ps 中的 cmets,它会有所帮助

【问题讨论】:

    标签: node.js dotenv


    【解决方案1】:

    您需要在调用.env 变量的每个文件中调用dotenv

    import dotenv from 'dotenv';
    import { Client } from 'pg';
    
    const config = dotenv.config();
    
    console.log(process.env.DATABASE_URL, 'fds');
    

    如果您想在所有应用文件中调用 dotenv 而不是每次都调用它,那么您需要在运行应用时要求它:

    node -r dotenv/config app.js
    

    【讨论】:

    • 当我导入 'dotenv' 时它仍然是 undefined ,我使用 node_modules/babel-watch/babel-watch.js src/app.js 运行我的代码
    • 或者你的意思是导入,然后像 dotenv.config() 一样做?
    • 是的,我就是这个意思。抱歉,更新了我的答案。
    • 在我看来这是一种奇怪的方法,但谢谢)
    • 这个答案不正确。如果您正确实施,您只需要调用 dotenv.config() 一次。 node.js 应用程序的正确架构是将 server.ts 和 app.ts 逻辑分离到两个不同的文件中。 dotenv 应该在 app.ts 文件中使用,它可以在应用程序的所有其他文件中使用,而无需一次又一次地重新导入。
    【解决方案2】:

    如果你不想使用外部包,你可以像这样运行你的脚本 :) 我更喜欢这种方法。

    "start": "sh -ac '. ./.env; node index.js'"
    

    【讨论】:

    • 虽然这可能适用于简单的 .env 文件,但不适用于 dotenv-expand
    • dotenv-expand 无论如何都没用。如果在调用脚本的环境中使用export 导出环境变量,它们将在那里可用。
    【解决方案3】:

    为了避免写

    dotenv.config()
    

    在每个文件中,您只需在 app.js 中添加这行代码

    dotenv.config({ path: path.resolve(__dirname, "path/to/.env") });
    

    【讨论】:

      猜你喜欢
      • 2018-05-13
      • 2021-03-11
      • 2019-04-18
      • 2010-10-09
      • 2013-11-03
      • 2016-01-28
      • 1970-01-01
      • 2020-01-05
      • 2021-08-12
      相关资源
      最近更新 更多