【问题标题】:require('dotenv').config() in node.jsnode.js 中的 require('dotenv').config()
【发布时间】:2020-06-14 06:40:09
【问题描述】:

在我的 node.js 应用程序中,我有一个 require('dotenv').config(); 行,我在本地开发时需要它以使用环境变量。但是,当我部署到 AWS 时,我需要注释掉这一行,否则应用程序会崩溃。目前我有 4 行这样的行,当我推/拉应用程序时必须继续评论/取消评论它们有点烦人 - 是否有任何解决方法可以消除在部署到 AWS 时必须继续删除行的需要/包括我在本地拉和工作时的线?

【问题讨论】:

    标签: node.js environment-variables dotenv


    【解决方案1】:

    也许你可以检查NODE_ENV 的值(我假设你部署在production)。

    类似:

    if (process.env.NODE_ENV === 'development') {
      require('dotenv').config();
    }
    

    或者如果NODE_ENV 不是production(如果你有NODE_ENV === 'test' 之类的东西很有用):

    if (process.env.NODE_ENV !== 'production') {
      require('dotenv').config();
    }
    

    【讨论】:

    • NODE_ENV 是否应该在 AWS/开发中定义?我使用了一个 console.log 语句来查看它在开发中是未定义的——我可以在产品/开发中为这些使用不同的值,但是没有任何变量可以解决问题吗?
    • 阅读NODE_ENV variable in Node.jsSetting NODE_ENV="production" 了解NODE_ENV。您是否使用任何工具/库进行开发,例如 nodemon?在生产环境中,如 AWS,NODE_ENV 应该是 production
    • 但是 NODE_ENV 是必需的,我不能在产品/开发中使用任何具有不同值的变量吗?
    • 没必要,比较方便的方式。它也是user environment 的值。
    【解决方案2】:

    还请查看名为 config 的 npm 包。它为我们提供了多个 files.json,包括 default.json、development.json、local.json。在某些情况下,我们只需要更改开发或任何其他环境中的一些密钥,而我们希望所有环境中的东西都相同,例如端口、jwt 秘密等。看看链接

    https://www.npmjs.com/package/config

    【讨论】:

    【解决方案3】:

    IMO 最好不要有检查 NODE_ENV 并在某些情况下加载内容的代码。

    我把它放到一个专门的 npm 脚本中,比如 npm run dev,在那里我会加载 dotenv/config 并在需要时设置 .env 文件的路径。

    在您的情况下,package.json 可能看起来像

      "scripts": {
        "dev": "node -r dotenv/config ./src/index.js"
      }
    

    奖励曲目:如果您的包的父文件夹中有 .env 文件 + 启用远程调试器:

      "scripts": {
        "dev": "DOTENV_CONFIG_PATH=../.env node --inspect=0.0.0.0 -r dotenv/config ./src/index.js"
      }
    

    然后你只运行npm run dev 就可以了。

    对于生产,我会添加一个不带调试器和 dotenv/config 加载的不同 npm 脚本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-31
      • 2021-07-08
      • 1970-01-01
      • 2023-03-03
      • 2020-10-02
      • 2020-01-10
      • 2019-10-23
      相关资源
      最近更新 更多