add-setting-env
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseAdding Environment Variable for User Settings
为用户设置添加环境变量
Add server-side environment variables to configure default values for user settings.
Priority: User Custom > Server Env Var > Hardcoded Default
添加服务器端环境变量以配置用户设置的默认值。
优先级:用户自定义 > 服务器环境变量 > 硬编码默认值
Steps
步骤
1. Define Environment Variable
1. 定义环境变量
Create :
src/envs/<domain>.tstypescript
import { createEnv } from '@t3-oss/env-nextjs';
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();创建文件:
src/envs/<domain>.tstypescript
import { createEnv } from '@t3-oss/env-nextjs';
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. Update Type (if new domain)
2. 更新类型(若为新领域)
Add to :
packages/types/src/serverConfig.tstypescript
import { User<Domain>Config } from './user/settings';
export interface GlobalServerConfig {
<domain>?: PartialDeep<User<Domain>Config>;
}Prefer reusing existing types from .
packages/types/src/user/settings添加至:
packages/types/src/serverConfig.tstypescript
import { User<Domain>Config } from './user/settings';
export interface GlobalServerConfig {
<domain>?: PartialDeep<User<Domain>Config>;
}优先复用中的现有类型。
packages/types/src/user/settings3. Assemble Server Config (if new domain)
3. 组装服务器配置(若为新领域)
In :
src/server/globalConfig/index.tstypescript
import { <domain>Env } from '@/envs/<domain>';
export const getServerGlobalConfig = async () => {
const config: GlobalServerConfig = {
<domain>: cleanObject({
<settingName>: <domain>Env.YOUR_ENV_VAR,
}),
};
return config;
};在中:
src/server/globalConfig/index.tstypescript
import { <domain>Env } from '@/envs/<domain>';
export const getServerGlobalConfig = async () => {
const config: GlobalServerConfig = {
<domain>: cleanObject({
<settingName>: <domain>Env.YOUR_ENV_VAR,
}),
};
return config;
};4. Merge to User Store (if new domain)
4. 合并至用户存储(若为新领域)
In :
src/store/user/slices/common/action.tstypescript
const serverSettings: PartialDeep<UserSettings> = {
<domain>: serverConfig.<domain>,
};在中:
src/store/user/slices/common/action.tstypescript
const serverSettings: PartialDeep<UserSettings> = {
<domain>: serverConfig.<domain>,
};5. Update .env.example
5. 更新.env.example
bash
undefinedbash
undefined<Description> (range/options, default: X)
<Description> (range/options, default: X)
YOUR_ENV_VAR=<example>
YOUR_ENV_VAR=<example>
undefinedundefined6. Update Documentation
6. 更新文档
- (EN)
docs/self-hosting/environment-variables/basic.mdx - (CN)
docs/self-hosting/environment-variables/basic.zh-CN.mdx
- (英文)
docs/self-hosting/environment-variables/basic.mdx - (中文)
docs/self-hosting/environment-variables/basic.zh-CN.mdx
Example: AI_IMAGE_DEFAULT_IMAGE_NUM
示例:AI_IMAGE_DEFAULT_IMAGE_NUM
typescript
// src/envs/image.ts
AI_IMAGE_DEFAULT_IMAGE_NUM: z.coerce.number().min(1).max(20).optional(),
// packages/types/src/serverConfig.ts
image?: PartialDeep<UserImageConfig>;
// src/server/globalConfig/index.ts
image: cleanObject({ defaultImageNum: imageEnv.AI_IMAGE_DEFAULT_IMAGE_NUM }),
// src/store/user/slices/common/action.ts
image: serverConfig.image,
// .env.exampletypescript
// src/envs/image.ts
AI_IMAGE_DEFAULT_IMAGE_NUM: z.coerce.number().min(1).max(20).optional(),
// packages/types/src/serverConfig.ts
image?: PartialDeep<UserImageConfig>;
// src/server/globalConfig/index.ts
image: cleanObject({ defaultImageNum: imageEnv.AI_IMAGE_DEFAULT_IMAGE_NUM }),
// src/store/user/slices/common/action.ts
image: serverConfig.image,
// .env.exampleAI_IMAGE_DEFAULT_IMAGE_NUM=4
AI_IMAGE_DEFAULT_IMAGE_NUM=4
undefinedundefined