env-configuration
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseEnvironment configuration
环境配置
When to use: Adding or reading env vars, updating , or validating config at startup with / .
.env.exampleparseEnvparseEnvOptional适用场景: 添加或读取环境变量、更新,或在启动时使用 / 验证配置。
.env.exampleparseEnvparseEnvOptionalLAT_
prefix convention
LAT_LAT_
前缀约定
LAT_All application environment variables must be prefixed with so they do not collide with third-party services, Docker, or common names.
LAT_Use for:
LAT_- Database URLs and pool settings (,
LAT_DATABASE_URL, …)LAT_PG_POOL_MAX - Service endpoints the app reads (,
CLICKHOUSE_URL, …)LAT_REDIS_HOST - App ports (,
LAT_API_PORT,LAT_WEB_PORT)LAT_INGEST_PORT - Auth, email, OAuth, billing, CORS (,
LAT_BETTER_AUTH_SECRET, …)LAT_MAILPIT_HOST - Any new variable consumed by Latitude application code
Do not use for:
LAT_NODE_ENV- Docker-only init variables (,
POSTGRES_USER, …)CLICKHOUSE_USER - Config read only by container images (Weaviate, Redis in compose, etc.)
- Browser-exposed Vite vars: use (Vite requires the
VITE_LAT_*prefix)VITE_
Reference: lists Docker “Services” vs “Latitude Application” () variables.
.env.exampleLAT_*所有应用环境变量必须以作为前缀,避免与第三方服务、Docker或通用名称冲突。
LAT_使用前缀的场景:
LAT_- 数据库URL及连接池设置(、
LAT_DATABASE_URL等)LAT_PG_POOL_MAX - 应用读取的服务端点(、
CLICKHOUSE_URL等)LAT_REDIS_HOST - 应用端口(、
LAT_API_PORT、LAT_WEB_PORT)LAT_INGEST_PORT - 认证、邮件、OAuth、计费、CORS相关配置(、
LAT_BETTER_AUTH_SECRET等)LAT_MAILPIT_HOST - Latitude应用代码使用的任何新变量
不使用前缀的场景:
LAT_NODE_ENV- 仅Docker初始化使用的变量(、
POSTGRES_USER等)CLICKHOUSE_USER - 仅容器镜像读取的配置(Weaviate、Docker Compose中的Redis等)
- 浏览器暴露的Vite变量:请使用****(Vite要求前缀为
VITE_LAT_*)VITE_
参考: 中区分了Docker“服务”变量与“Latitude应用”()变量。
.env.exampleLAT_*.env.example
maintenance
.env.example.env.example
维护
.env.exampleEvery new variable must appear in :
.env.example- Required: uncommented with a sensible local default (e.g. )
LAT_API_PORT=3001 - Optional: commented with a placeholder (e.g. )
# LAT_STRIPE_SECRET_KEY=sk_test_xxx
每个新变量必须出现在中:
.env.example- 必填项: 取消注释并设置合理的本地默认值(例如)
LAT_API_PORT=3001 - 可选项: 保持注释状态并使用占位符(例如)
# LAT_STRIPE_SECRET_KEY=sk_test_xxx
Parsing in code
代码中的解析
Always use or from — never ad hoc or unprefixed names for app config.
parseEnvparseEnvOptional@platform/envprocess.env.FOOtypescript
// ❌ Bad - unprefixed or direct access
const port = Number(process.env.PORT)
// ✅ Good - pass the variable name string (parseEnv reads process.env internally)
import { parseEnv, parseEnvOptional } from "@platform/env"
import { Effect } from "effect"
const port = Effect.runSync(parseEnv("LAT_API_PORT", "number", 3001))
const dbUrl = Effect.runSync(parseEnv("LAT_DATABASE_URL", "string"))For where configuration is wired in apps (clients, routes), see architecture-boundaries.
请始终使用中的或——绝不要直接使用或无前缀的名称来处理应用配置。
@platform/envparseEnvparseEnvOptionalprocess.env.FOOtypescript
// ❌ 错误写法 - 无前缀或直接访问
const port = Number(process.env.PORT)
// ✅ 正确写法 - 传入变量名字符串(parseEnv内部会读取process.env)
import { parseEnv, parseEnvOptional } from "@platform/env"
import { Effect } from "effect"
const port = Effect.runSync(parseEnv("LAT_API_PORT", "number", 3001))
const dbUrl = Effect.runSync(parseEnv("LAT_DATABASE_URL", "string"))关于应用中配置的注入位置(客户端、路由),请参考架构边界。