开发者生态
morning
我们正在将 dotenvy 分叉为 dotenv-ng
摘要
We have released dotenv-ng 1.0, a modern Rust implementation for loading and rendering .env files. It began as a fork of dotenvy after its parser changed a secret while reading it. That may sound cont...
the
dotenv
and
was
dotenvy
SecretSpec
The
Rust
env
fork
2026-08-18
1 阅读
约4分钟阅读
linggen
字号:
我们发布了 dotenv-ng 1.0,这是一个用于加载和渲染 .env 文件的现代 Rust 实现。它最初是 dotenvy 的一个分支,其解析器在读取秘密时更改了该秘密。这听起来可能很矛盾。 SecretSpec 仍然致力于消除作为秘密接口的环境变量,并且我们已经写过 .env 出错的地方。它不应该是一个秘密的最终归宿。但从 .env 迁移首先要正确读取它。直接失败的是 SecretSpec 问题 #73。 dotenv 文件包含带有 bcrypt 片段的值: TEST = "foo:$2a$10$TWoviNHS27HJMw1PKe4tBeIMlms6tWdYS9hKoHANKCQhluDlEt/gu" 该文件完好无损。通过 dotenv 提供程序读取它会返回不同的值,因为 dotenv 将美元前缀的片段视为变量替换。该故障后来显示为身份验证错误,而不是解析错误。自 2024 年起,上游就已提出可配置替换的请求。拉取请求于 2026 年到达,但针对的是未发布的 API。迁移工具不能要求用户识别并转义其机密内的解析器语法。最初的 Rust dotenv 箱于 2020 年停止发布,并最终被 RustSec 标记为不再维护,后者将 dotenv 列为替代方案。多滕维的描述仍然称其为“一把维护良好的叉子”。其最新发布版本0.15.7于2023年3月22日发布。 Rust 论坛讨论指出 2025 年发布间隔为两年。到 bcrypt bug 阻止 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 名称和依赖项别名: dotenv = { package = " dotenv-ng " , version = " 1 " } 从 SecretSpec 0.20 开始,dotenv-ng 在整个 SecretSpec 中支持 dotenv 解析和渲染。
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱