从 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-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` 函数接受具有以下属性的可选选项对象:
**你应该使用它吗?**
老实说,我仍在考虑这个包的广泛用途。如果您已经熟悉 .env 文件和静态配置,则可能不需要此工具。但如果您使用:
并且对您当前的设置不满意,那么 json-to-env-converter 可能会节省您一些时间,值得一试。
**安装和反馈**
如果您想尝试一下,可以从 npm 安装它:
npm i json-to-env-converter
我很乐意听取您的想法、反馈或最重要的改进建议,因此请随意在此处的评论中提及或在我的 github repo https://github.com/neenus/json-to-env 上提交拉取请求。这对我来说是一次学习经历,我很高兴看到它会取得什么进展。
哦,还有一件事...感谢您阅读我的第一篇文章!