返回

文章详情

我们正在将 dotenvy 叉到 dotenv-ng

Hacker News2026年8月17日 17:55

2026年8月15日,我们发布了 dotenv-ng 1.0,这是一个现代的 Rust 实现,用于加载和渲染 .env 文件。它起初是 dotenvy 的一个分叉,因为其解析器在读取时更改了一个秘密。这听起来可能矛盾。SecretSpec 仍在努力消除环境变量作为秘密接口,并且我们已经写过关于 .env 出错的地方。这不应该是秘密的最终归宿。但从 .env 迁移开始于正确读取它。直接的失败是 SecretSpec 问题 #73 。一个 dotenv 文件包含一个带有 bcrypt 片段的值:TEST = "foo:$2a$10$TWoviNHS27HJMw1PKe4tBeIMlms6tWdYS9hKoHANKCQhluDlEt/gu"。文件是完整的。通过 dotenv 提供程序读取它返回了一个不同的值,因为 dotenvy 将以美元符号开头的片段视为变量替代。这种失败后来表现为身份验证错误,而不是解析错误。自 2024 年以来,一个上游请求已经打开,试图使替代可配置。2026 年出现了一个拉取请求,但目标是一个未发布的 API。迁移工具不能要求用户在他们的秘密中识别和转义解析器语法。最初的 Rust dotenv crate 自 2020 年以来停止发布,并最终被 RustSec 标记为不再维护,并且列出 dotenvy 作为替代方案。Dotenvy 的描述仍然称其为“一个良好维护的分叉。”它最新发布的版本 0.15.7 于 2023年3月22日发布。一个 Rust 论坛讨论注意到 2025 年的两年发布间隔。当 bcrypt 错误阻塞 SecretSpec 时,已经超过三年。一个被维护的分叉重复其上游的发布问题,这是一种令人不快的讽刺。其维护者不欠我们一个发布,但 SecretSpec 需要按照我们控制的时间表进行破坏性修复。我们首先考虑了一个小补丁。审计解析器发现了更多关于 JSON、Windows 路径、Unicode 名字、优先级及部分环境突变的问题。因此,dotenv-ng 从 dotenvy 0.15.7 开始,但在正确性要求的地方故意打破兼容性。版本 1.0 添加了:一个源感知解析器,带有结构化的错误;默认情况下字面美元符号,只有当调用者明确启用时才可用替代;支持破折号、前导数字、前导点和 Unicode 的更广泛键语法;一个渲染器,仅添加解析一个值时所需的引号和转义;在进程环境突变之前的验证;以及对该突变的明确不安全边界。属性测试检查任意 Unicode 和语法密集值,确保仅在必要时使用引号,并进行完整文档的往返。作为重写核心的解析器和渲染器均具有100% 的行覆盖率。完整的兼容性和 API 更改记录在 dotenv-ng 1.0 的变更日志中。该软件包在 crates.io 上可用。应用程序可以通过依赖别名保持熟悉的 dotenv crate 名称:[dependencies] dotenv = { package = "dotenv-ng", version = "1" } 从 SecretSpec 0.20 开始,dotenv-ng 支持 SecretSpec 中的 dotenv 解析和渲染。

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡