【问题标题】:Running an .env file and access them from Node运行 .env 文件并从 Node 访问它们
【发布时间】:2020-04-26 19:07:47
【问题描述】:

自从我成为 Linux 用户 10 多年以来,这感觉有点尴尬。但是,我遇到了一个我无法理解的问题。

假设我想公开一个环境变量SECRET,我可以从节点访问它 process.env.SECRET

我只想写这是我启动应用程序的同一个终端

# Linux bash
$ export SECRET=Ultr4Secr3t
$ echo $SECRET
$ > Ultr4Secr3t

然后运行节点应用nodejs app.js

// app.js
console.log(process.env.SECRET)
> Ultr4Secr3t

一切都好!

但我真的很想在 repo 中有一个 .env 文件。

.env 文件示例

SECRET=Ultr4Secr3t
# Linux bash
$ . .env # On Mac we had to do ". ./.env"
$ echo $SECRET
$ Ultr4Secr3t

现在当我运行应用程序时发生了奇怪的事情

然后运行节点应用nodejs app.js

// app.js
console.log(process.env.SECRET)
> undefined

为什么是undefined?我宁愿不必使用dotenv 包。

【问题讨论】:

    标签: node.js linux unix environment-variables


    【解决方案1】:

    嗯,Node js 本身并不支持这一点。 1) 运行应用时可以在node命令中提供所有变量:

    SECRET=Ultr4Secr3t node app.js
    

    然后你可以通过process.env访问这个

    2) 您可以将所有配置添加到config_file.json 文件中,然后调整权限。你需要的只是const env = require('config_file')

    【讨论】:

      【解决方案2】:

      在运行 . ./.env 时,实际上是在“本地”设置它们。例如:

      // .env
      SECRET=123
      

      没有导出设置的环境变量不会在你调用的命令的环境中被继承。

      Source: January @ AskUbuntu

      当您echo $SECRET 时,它会向您显示输出。 但是当你env | grep "SECRET" 时,它不会显示给你,它不在你当前的 bash 环境中。

      但是,如果您运行 export SECRET=123,它就在您的环境中。因此node 能够读取环境变量SECRET

      【讨论】:

        【解决方案3】:

        您可以运行 source .env 而不是 . .env,这样 .env 文件中的 bash 变量也会注册到您的主 bash 进程中,从该进程启动节点进程并继承它的环境变量。

        【讨论】:

          【解决方案4】:

          之前发布的一些解决方案正在运行,但您通常不希望使用某些变量公开/污染 CLI 历史记录。因此,具有受限权限的.env 文件可能是解决问题的一种方法。

          使所有.env 变量在node app.js 中可用,而不是:

          . .env # or
          source .env
          

          使用这个:

          export $(cat .env | xargs)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-03-12
            • 2020-08-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-10-27
            • 1970-01-01
            相关资源
            最近更新 更多