环境变量
Renderer-public VITE 变量、main-process MAIN_VITE 变量与 Edge secrets。
Electron 有多个环境边界。renderer 使用的值会被打进客户端代码,main process 使用的值会被编译进 Electron main bundle,服务端 secret 则必须完全留在应用外部。
模型
.env位于项目根目录,由 Vite/electron-vite 读取。VITE_*是 renderer-public,会随应用 bundle 发布。MAIN_VITE_*是 main-process 构建期配置。- Creem API keys 与 webhook secrets 是 Supabase Edge secrets,不是 app env。
- 打包与签名变量是 electron-builder 或 CI 使用的发布期环境变量。
Supabase URL 与 publishable key 可以随应用发布,因为授权由 Row Level Security
强制执行。Supabase service-role key 不能发布,绝不能放进 .env。
起始 .env
VITE_AUTH_ENABLED=true
VITE_AUTO_UPDATE_ENABLED=true
VITE_SUPABASE_URL=https://your-project-ref.supabase.co
VITE_SUPABASE_PUBLISHABLE_KEY=your-publishable-anon-key
MAIN_VITE_SENTRY_DSN=
VITE_ANALYTICS_ENDPOINT=
VITE_ANALYTICS_WRITE_KEY=
VITE_REPO_URL=
VITE_BILLING_ENABLED=false
VITE_BILLING_LICENSE_MODE=false
VITE_CREEM_PRODUCT_PRO_MONTHLY=prod_xxx
VITE_CREEM_PRODUCT_PRO_YEARLY=prod_xxx
VITE_CREEM_PRODUCT_LIFETIME=prod_xxxVITE_SHOWCASE_ENABLED 与 MAIN_VITE_SHOWCASE_ENABLED 会被代码读取,但当前
不在 .env.example 中。要预览或构建没有可删除演示层的应用时,请同时添加两项。
VITE_SHOWCASE_ENABLED=false
MAIN_VITE_SHOWCASE_ENABLED=falseApp env reference
Feature flags
Prop
Type
Supabase
Prop
Type
这些值会解锁邮箱认证、profile 读写、avatar 上传、todos 与 subscription reads。 设置页会说明应用期望的 SQL 与 storage bucket。
Creem product IDs
Prop
Type
Product IDs 不是 secrets。shared/price-config.ts 把它们映射到 plan tiers;
未知或缺失的 product ID 会解析为 free,避免未配置构建意外解锁付费功能。
Observability、analytics 与 support
Prop
Type
Non-app env
Supabase Edge secrets
这些值用 supabase secrets set 或 Edge secret env file 设置。它们由
supabase/functions/ 下的函数读取,绝不能打进桌面应用。
Prop
Type
Packaging、updates 与 signing
Prop
Type
Test-only
Prop
Type
安全发布检查
| 值 | 可以进入 app bundle? | 原因 |
|---|---|---|
| Supabase URL | 可以 | 标识项目 endpoint。 |
| Supabase publishable key | 可以 | 面向客户端;RLS 决定用户能访问哪些 rows。 |
| Creem product IDs | 可以 | 只是产品标识,本身不能创建 checkout sessions。 |
| Sentry DSN | 可以,但要有 opt-in policy | DSN 是 ingest 地址,不是签名 secret。是否上报由用户 opt-in 控制。 |
| Analytics write key | 当作公开值 | 如果设置,它会发布到 renderer。只用于低风险 client ingestion。 |
| Supabase service-role key | 不可以 | 会绕过 RLS 并写入受保护数据,只能留在服务端。 |
| Creem API key/webhook secret | 不可以 | provider 操作与签名校验的服务端凭据。 |
| 代码签名证书/密码 | 不可以 | CI 或本地签名环境的发布 secret。 |
