关于 add-setting-env
介绍如何添加服务端环境变量,为用户设置提供默认值。指南涵盖变量校验、配置类型、全局服务端配置、用户 Store 合并及文档更新。
主要功能
- 01定义并校验环境变量
- 02添加或复用服务端配置类型
- 03组装全局服务端配置
- 04将默认值合并到用户 Store
- 05更新示例与自托管文档
适用场景
- 01为用户偏好设置服务端默认值
- 02在新领域添加可配置设置
- 03编写环境变量部署说明
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ lobehub/ lobehub --skill add-setting-env安装后在 Claude Code 中输入/add-setting-env确认已加载。
附带文件agents/openai.yaml
详细介绍
添加用户设置的环境变量
添加服务端环境变量,以配置用户设置的默认值。
优先级:用户自定义 > 服务端环境变量 > 硬编码默认值
步骤
1. 定义环境变量
创建 packages/env/src/<domain>.ts(导入路径仍为 @/envs/<domain> — tsconfig 会优先将其映射到 packages/env/src/*):
import { createEnv } from '@t3-oss/env-core';
import { z } from 'zod';
export const get<Domain>Config = () => {
return createEnv({
server: {
YOUR_ENV_VAR: z.coerce.number().min(MIN).max(MAX).optional(),
},
runtimeEnv: {
YOUR_ENV_VAR: process.env.YOUR_ENV_VAR,
},
});
};
export const <domain>Env = get<Domain>Config();
2. 更新类型(如果是新领域)
添加到 packages/types/src/serverConfig.ts:
import { User<Domain>Config } from './user/settings';
export interface GlobalServerConfig {
<domain>?: PartialDeep<User<Domain>Config>;
}
优先复用现有类型,这些类型位于 packages/types/src/user/settings 中。
3. 组装服务端配置(如果是新领域)
在 apps/server/src/globalConfig/index.ts 中:
import { <domain>Env } from '@/envs/<domain>';
export const getServerGlobalConfig = async () => {
const config: GlobalServerConfig = {
<domain>: cleanObject({
<settingName>: <domain>Env.YOUR_ENV_VAR,
}),
};
return config;
};
4. 合并到用户存储(如果是新领域)
在 src/store/user/slices/common/action.ts 中:
const serverSettings: PartialDeep<UserSettings> = {
<domain>: serverConfig.<domain>,
};
5. 更新 .env.example
# <Description> (range/options, default: X)
# YOUR_ENV_VAR=<example>
6. 更新文档
docs/self-hosting/environment-variables/basic.mdx(英文)docs/self-hosting/environment-variables/basic.zh-CN.mdx(中文)
示例:AI_IMAGE_DEFAULT_IMAGE_NUM
// packages/env/src/image.ts (import as @/envs/image)
AI_IMAGE_DEFAULT_IMAGE_NUM: z.coerce.number().min(1).max(20).optional(),
// packages/types/src/serverConfig.ts
image?: PartialDeep<UserImageConfig>;
// apps/server/src/globalConfig/index.ts
image: cleanObject({ defaultImageNum: imageEnv.AI_IMAGE_DEFAULT_IMAGE_NUM }),
// src/store/user/slices/common/action.ts
image: serverConfig.image,
// .env.example
# AI_IMAGE_DEFAULT_IMAGE_NUM=4
评论
支持 Markdown