@ clippboard- 健康/ 配置
类型安全静态配置管理:一个纯函数,用于解析,对照Zod进行验证 计划,并冻结配置值.
配置值按从最高优先级到最低优先级排列:
- 环境变量
- 已解析将配置路径从骆驼Case转换为 UPPER SNAKE 。 例如
{ myApi: { port: 3000 } }配置解析为MY_API_PORT。 。 。 .
- 已解析将配置路径从骆驼Case转换为 UPPER SNAKE 。 例如
- 环境特定覆盖, QQlink ConfigValue. overrides}
- 默认值, QQlink 配置。 默认值
支持的配置值类型 :
- 二进制
- 布尔
- 日期
- 编号
- 字符串
- 使用以上类型的数组和嵌入对象
要覆盖带有环境变量的数组,请使用字符串化的JSON数组,例如. ["a","b"]。 。 。 .
重要性: 为了避免运行时间出错:
- 环境变量是字符串,所以使用
z.coerce你计划要征服的人的Zod类型. 请注意:z.coerce.boolean()强迫任何真实值true限制"true" | "false",使用booleanString计划从@clipboard-health/contract-core。 。 。 . - 生成的配置被深深冻结, 如果您尝试, 将会丢出运行时间错误
修改它。 实际返回类型是
ReadonlyDeep<SchemaT>,但库返回Readonly<SchemaT>因为前者防止客户端将配置值传递到 不明确接受的函数readonly类型.
目录
安装
npm install @clipboard-health/config
使用量
类型安全配置
import { ok } from "node:assert/strict";
import { createConfig } from "@clipboard-health/config";
import { z } from "zod";
const allowed = ["local", "development", "production"] as const;
type Allowed = (typeof allowed)[number];
function createEnvironmentConfig(current: Allowed) {
return createConfig({
config: {
baseUrl: {
defaultValue: "http://localhost:3000",
description: "Base URL for API requests",
overrides: {
development: "https://dev.example.com",
production: "https://api.example.com",
},
},
database: {
port: {
defaultValue: 5432,
description: "Database port",
},
},
},
environment: { allowed, current },
schema: z.object({
baseUrl: z.string().url(),
database: z.object({
// Use `z.coerce` to override with environment variables.
port: z.coerce.number().min(1024).max(65_535),
}),
}),
});
}
{
// Uses default values.
const config = createEnvironmentConfig("local");
ok(config.baseUrl === "http://localhost:3000");
ok(config.database.port === 5432);
}
{
// Uses baseUrl environment override.
const config = createEnvironmentConfig("development");
ok(config.baseUrl === "https://dev.example.com");
ok(config.database.port === 5432);
}
// Uses environment variable overrides.
const original = { ...process.env };
try {
process.env["BASE_URL"] = "https://staging.example.com";
process.env["DATABASE_PORT"] = "54320";
const config = createEnvironmentConfig("local");
ok(config.baseUrl === "https://staging.example.com");
ok(config.database.port === 54_320);
} finally {
process.env = { ...original };
}
地方发展指挥部
见 package.json scripts 用于命令列表.