You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Vercel的Monorepo中为每个项目配置独立环境变量?

在Turborepo + Vercel 中管理多站点Monorepo的环境变量

完全不需要放弃Monorepo,Vercel原生支持Turborepo多项目的环境变量隔离管理,以下是几种落地可行的方案:

方案1:Vercel项目级独立配置

每个站点(website-1、website-2)在Vercel上作为独立项目维护,但保留Monorepo结构:

  • 在Vercel中为每个站点创建单独项目,关联同一个Monorepo仓库
  • 进入每个项目的「Settings → Environment Variables」,配置专属的AIRTABLE_BASE_ID等变量
  • 在turbo.json中为每个站点的构建任务声明需要传递的环境变量:
    {
      "tasks": {
        "build": {
          "dependsOn": ["^build"],
          "outputs": ["public/**"]
        },
        "website-1#build": {
          "env": ["AIRTABLE_BASE_ID"]
        },
        "website-2#build": {
          "env": ["AIRTABLE_BASE_ID"]
        }
      }
    }
    
  • 部署时每个站点独立触发构建,Vercel会自动注入对应项目的专属变量

方案2:结合.env文件与Turbo变量传递

如果想保留本地的.env文件结构,同时在Vercel上统一管控:

  • 在Monorepo根目录为每个站点创建专属环境文件,比如.env.website-1.production、.env.website-2.production
  • 在每个站点的Vercel项目设置中,添加ENV_FILE变量,值为对应站点的环境文件名(如.env.website-1.production)
  • 修改站点的Gatsby配置或构建脚本,根据ENV_FILE加载对应变量:
    require('dotenv').config({ path: process.env.ENV_FILE || '.env.production' })
    
  • Turbo会在构建时传递Vercel注入的ENV_FILE变量,确保每个站点加载正确配置

方案3:全局+局部变量组合管理

  • 把所有站点通用的变量(如公共API域名)放在Monorepo根目录,通过Vercel团队级环境变量统一配置
  • 每个站点的专属变量(如AIRTABLE_BASE_ID)在各自的Vercel项目中单独配置
  • 在turbo.json中声明全局和任务级变量的传递规则:
    {
      "globalEnv": ["COMMON_API_URL"],
      "tasks": {
        "build": {
          "dependsOn": ["^build"],
          "outputs": ["public/**"],
          "env": ["AIRTABLE_BASE_ID"]
        }
      }
    }
    

额外注意事项

  • Gatsby变量规则:前缀为GATSBY_的变量会自动暴露到浏览器端,服务端专用变量无需前缀,但要确保构建时已注入
  • Vercel根目录配置:每个站点的Vercel项目需在「General → Root Directory」中填写站点的相对路径(如website-1-using-theme)
  • Turbo缓存处理:如果环境变量变更,构建时需添加--force参数,或在turbo.json中配置缓存键包含环境变量,避免使用旧缓存

内容的提问来源于stack exchange,提问作者Mattia Rasulo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 17:07:43