如何在Turborepo中同时使用根目录与应用级.env文件
Monorepo 环境变量拆分实现方案
核心思路
让每个应用独立处理环境变量加载逻辑:根目录.env仅存共享变量,各应用目录的专属.env存独有用变量,启动时按「共享→专属」的顺序加载(专属变量可覆盖同名共享变量)。
具体步骤
1. 修改根目录启动脚本
移除根目录package.json中start脚本的全局env-cmd配置,交给各应用自行处理环境变量:
"start": "turbo run start --parallel"
2. 配置应用专属环境变量
在目标应用目录(如/apps/web)下创建专属.env文件,写入该应用独有的环境变量,例如:
# /apps/web/.env NEXT_PUBLIC_WEB_API_URL=https://web.example.com/api WEB_FEATURE_FLAG=true
3. 修改应用启动脚本
在每个应用的package.json中,更新start脚本,通过env-cmd同时加载根目录的共享.env和应用自身的专属.env:
示例1:React CRA 应用
"start": "env-cmd -f ../../.env -f .env react-scripts start"
示例2:Next.js 应用
"start": "env-cmd -f ../../.env -f .env next dev"
原理说明
- 根目录执行
yarn start时,Turbo 会并行触发所有应用的start脚本 - 每个应用的脚本先加载根目录的共享变量,再加载自身专属变量,确保专属变量仅对当前应用生效
- 若根目录与应用目录存在同名变量,应用目录的变量会覆盖根目录的,满足个性化配置需求
可选优化
如果希望更清晰地区分共享变量,可将根目录.env重命名为.env.shared,然后修改应用脚本路径:
"start": "env-cmd -f ../../.env.shared -f .env <应用启动命令>"
内容的提问来源于stack exchange,提问作者klugjo
相关产品推荐
相关产品推荐

