一次定义,处处信任:CtroEnv 深度解析
CtroEnv 核心 API 使用四种校验器工厂。你可以利用它们轻松保障环境变量的安全。
以下是它们的工作原理:
• string() — 用于文本。你可以添加针对 URL、电子邮件、端口或特定长度的规则。它支持使用正则表达式进行自定义模式匹配。
• number() — 用于数值。它能将 "3000" 等字符串转换为实际的数字。你可以强制要求整数、正值或特定的数值范围。
• boolean() — 用于布尔值(true/false)。它会自动处理 "true" 等字符串或 "1" 等数字。这非常适合用于功能开关(feature flags)。
• pick() — 用于将值限制在特定的列表中。它会创建字面量类型(literal types),让你的代码确切知道哪些字符串是被允许的。如果你拼写错误,它甚至会提供纠错建议。
每个校验器都具备的实用方法:
.default(value)— 如果变量缺失,则设置默认值。.optional()— 允许值为undefined。.describe(text)— 为你的错误消息和文档添加说明。.secret()— 在终端输出中掩盖敏感值。.validate(fn)— 允许你为一次性规则编写自定义逻辑。
CtroEnv 支持多种不同的环境:
- Node.js:使用
nodeSource()或loadEnv()来读取process.env或.env文件。 - Vite:使用 Vite 插件,如果变量无效,则让构建失败。
- Next.js:利用内置支持来分离服务端和客户端变量。这可以防止你意外地将密钥泄露到浏览器中。
当校验失败时,CtroEnv 不仅仅是停止运行。它会收集每一个错误并一次性全部展示出来。你会得到一份清晰的报告,包含键名(key)、错误消息,甚至还有修复建议。
最终输出是一个冻结对象(frozen object)。这意味着你的配置是只读的,可以防止在运行时发生意外更改。
来源:https://dev.to/ctrotech/define-once-trust-everywhere-ctroenv-deep-dive-3bjl