mcpField
A
add-setting-env

add-setting-env

github.com/lobehub开发83.6k4.2k 次安装今天更新
代码仓库

关于 add-setting-env

介绍如何添加服务端环境变量,为用户设置提供默认值。指南涵盖变量校验、配置类型、全局服务端配置、用户 Store 合并及文档更新。

主要功能

  1. 01定义并校验环境变量
  2. 02添加或复用服务端配置类型
  3. 03组装全局服务端配置
  4. 04将默认值合并到用户 Store
  5. 05更新示例与自托管文档

适用场景

  1. 01为用户偏好设置服务端默认值
  2. 02在新领域添加可配置设置
  3. 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