从 JSON 到环境变量:介绍 json-to-env-converter

大家好!这是我的第一篇文章(所以请在评论中多多包涵 🤣)。我很高兴与大家分享我一直在做的一个小项目,这个项目是出于个人需要。如果您曾经在 Node.js 应用程序中管理配置时遇到困难,您可能会发现这个小型零依赖包很有趣。它被称为 json-to-env-converter。

**什么是 json-to-env-converter?**

json-to-env-converter 是一个 npm 包,可将 JSON 对象转换为环境变量。它是一种轻量级工具,旨在帮助您处理基于 JSON 的配置,方法是将它们转换为环境变量并将其注入 process.env;它适用于配置可能是动态的、嵌套的或来自 API 或外部系统的场景。

这个想法是:您不需要手动设置复杂或动态配置的环境变量,而是可以通过编程方式从 JSON 对象加载它们并像访问任何其他环境变量一样访问它们。

**我为什么要建造它?**

我最近为我个人正在处理的每个项目构建了一个 secrets api;我调用 secrets api 在运行时获取以 json 格式提供的配置。更不用说在现代和大型应用程序中,配置可能会根据用户位置或其他动态因素而改变。虽然 .env 文件非常适合静态设置,但它们不容易处理:

  • 嵌套结构:将嵌套的 JSON 展平到环境变量中可能会变得很繁琐。
  • 动态源:在运行时加载配置而不重新启动应用程序并不是一件简单的事情。
  • 我构建了 json-to-env-converter 来探索解决这些问题的方法,这更多的是一个个人使用的项目,它绝对不是要取代像 dotenv 这样的工具,而是为了处理稍微不同的用例;我想将它开源并在 npm 上公开发布有什么坏处,如果有人发现它的用途我会很高兴。

    **工作原理**

    从 npm 安装包:

    npm i json-to-env-converter

    这是一个简单的例子来展示它的作用:

    基本示例

    import { jsonToEnv } from 'json-to-env-converter';
    
    const config = {
      database: {
        host: 'localhost',
        port: 5432,
      },
    };
    
    jsonToEnv(config);
    
    console.log(process.env.DATABASE_HOST); //Output: 'localhost'
    console.log(process.env.DATABASE_PORT); //Output: '5432'

    这将获取一个 JSON 对象并将其转换为环境变量。它还会展平嵌套键,因此 database.host 变为 DATABASE_HOST。

    **添加前缀**

    为了避免冲突,您可以添加前缀:

    jsonToEnv(config, { prefix: 'MYAPP_' });
    
    console.log(process.env.MYAPP_DATABASE_HOST); //Output: 'localhost'

    **用例:动态配置**

    此包的一个潜在用例是处理动态配置。例如,假设您有一个全局应用程序,可在运行时获取特定于区域的设置。您无需手动管理每个区域的 .env 文件,而是可以根据用户的位置动态加载正确的设置:

    const regionConfig = {
      us: {
        dbHost: 'us-db.example.com',
        apiUrl: 'https://api.us.example.com',
      },
      eu: {
        dbHost: 'eu-db.example.com',
        apiUrl: 'https://api.eu.example.com',
      },
    };
    
    const region = 'us'; // This could come from a runtime check
    jsonToEnv(regionConfig[region], { prefix: 'APP_' });
    
    console.log(process.env.APP_DBHOST); // Output: 'us-db.example.com'

    这允许您的应用程序调整其配置,而无需重新启动或硬编码值。

    **可用选项

    `jsonToEnv` 函数接受具有以下属性的可选选项对象:

  • 前缀:为环境变量名称添加前缀的字符串(默认值:'')。
  • envFile:一个布尔值,用于启用或禁用 .env 文件的创建(默认值:false);如果启用并且文件已存在,则会被覆盖。
  • envFileName:用于指定 .env 文件的名称的字符串(默认值:.env)。
  • envFilePath:用于指定应创建 .env 文件的路径的字符串(默认值:.)。
  • **你应该使用它吗?**

    老实说,我仍在考虑这个包的广泛用途。如果您已经熟悉 .env 文件和静态配置,则可能不需要此工具。但如果您使用:

  • 配置在运行时发生变化的动态环境
  • 需要转换为平面环境变量的嵌套 JSON 对象
  • 来自 API 或外部服务的程序化配置设置
  • 并且对您当前的设置不满意,那么 json-to-env-converter 可能会节省您一些时间,值得一试。

    **安装和反馈**

    如果您想尝试一下,可以从 npm 安装它:

    npm i json-to-env-converter

    我很乐意听取您的想法、反馈或最重要的改进建议,因此请随意在此处的评论中提及或在我的 github repo https://github.com/neenus/json-to-env 上提交拉取请求。这对我来说是一次学习经历,我很高兴看到它会取得什么进展。

    哦,还有一件事...感谢您阅读我的第一篇文章!