如何在SvelteKit与Turborepo中使用根目录全局.env文件?
如何在Turborepo全局共享根目录的.env.local
当然可以实现全局共享,但你之前的globalDependencies配置只是让Turbo监测该文件变化、触发重新构建,并不是用来注入环境变量的,所以没起作用。下面给你两个不用给每个包单独装dotenv-cli的解决方案:
方案1:用Turbo自带的全局环境变量传递
这是最简洁的方式,利用Turbo的globalEnv字段统一传递变量:
- 在根目录
.env.local中定义变量,前端用的变量必须加VITE_前缀(因为SvelteKit基于Vite),服务端变量无需前缀:VITE_API_BASE_URL=https://api.example.com SERVER_DB_PASSWORD=xxx - 修改
turbo.json,添加globalEnv字段,把需要全局传递的变量列进去:{ "$schema": "https://turbo.build/schema.json", "globalDependencies": [".env.local"], "globalEnv": ["VITE_API_BASE_URL", "SERVER_DB_PASSWORD"], "pipeline": { // 保留你原有的pipeline配置 } } - 在SvelteKit中直接使用:
- 前端代码:
import.meta.env.VITE_API_BASE_URL - 服务端代码(如hooks.server.ts):
process.env.SERVER_DB_PASSWORD
- 前端代码:
方案2:根目录统一配置dotenv-cli,子包复用
如果不想依赖Turbo的globalEnv,可以在根目录统一管理dotenv-cli,子包直接调用:
- 在根目录安装dotenv-cli:
pnpm add -D dotenv-cli - 根目录
package.json中添加全局脚本:"scripts": { "with-env": "dotenv -e ./.env.local --" } - 子包(如你的SvelteKit项目)的
package.json脚本直接调用根的with-env:
这样所有子包都无需单独安装dotenv-cli,直接复用根目录的配置。"scripts": { "dev": "pnpm --filter=.. with-env vite dev", "build": "pnpm --filter=.. with-env vite build" }
注意:修改Turbo配置后,记得重启dev服务才能生效。
内容的提问来源于stack exchange,提问作者flks
相关产品推荐
相关产品推荐

