英文:
How to use both root and app level env files with turborepo
问题
我有一个包含以下脚本的单体存储库:
"start": "env-cmd -f .env turbo run start --parallel",
如果我在根目录运行 yarn start
,它会使用根目录下的 .env
文件来运行所有我的应用程序。
我的许多环境变量只在一个特定的应用程序中使用,而且随着我不断添加新的应用程序,我的 /.env
文件变得杂乱不堪。我想将该 .env
文件仅用于共享环境变量,并在每个应用程序的根目录下添加子 .env
文件以供特定配置使用。
例如,如果我有一个名为 web
的应用程序,位于 /apps/web
,我想添加一个 /apps/web/.env
文件,仅在构建 web
应用程序时使用。
我该如何实现这一目标?
英文:
I have a monorepo with the following script:
"start": "env-cmd -f .env turbo run start --parallel",
If I run yarn start
at the root, it runs all my apps using the .env
file at the root.
A lot of my environment variables are only used in one specific app and my /.env
file is getting cluttered as I keep on adding new apps. I want to keep that .env
file for shared environment variables only and have children .env
files at the root of each apps for specific configurations.
Example if I have an app called web
located in /apps/web
, I would like to add an /apps/web/.env
file that is used only when building the web
app.
How can I achieve that ?
答案1
得分: 2
- 你可以将全局环境变量放在monorepo根目录的
.env
文件中。它们将默认在所有工作区中可用。 - 你应该将
dotenv-cli
包添加为依赖开发包(dev_deps),用于需要包含工作区特定变量的.env
文件的工作区。 - 更新你的
package.json
中的脚本:- 添加
"with-env": "dotenv -e ./.env --"
- 更新
"dev": "pnpm with-env next dev"
- 更新
"build": "pnpm with-env next build"
- 添加
- 从monorepo根目录的
.env
文件中移除所有特定于工作区的环境变量(并从turbo.json
的globalEnvs
中移除),将包含工作区特定环境变量的.env
文件添加到你的工作区到根目录(package.json级别)。
英文:
- You can leave your global envs in monorepo root
.env
file. They will be available in all your workspaces by default. - You should add
dotenv-cli
package as dev_deps for workspaces that require.env
file with workspace-specific variables. - Update your scripts in
package.json
:
- Add
"with-env": "dotenv -e ./.env --"
- Update
"dev": "pnpm with-env next dev"
, - Update
"build": "pnpm with-env next build"
- Remove all workspace-specific envs from monorepo root .env file (and
from turbo.jsonglobalEnvs
and add .env files (with workspace-specific envs) to your workspaces to the root (package.json level).
答案2
得分: 1
不确定如何同时运行根目录和应用程序级别,但如果您只想运行应用程序级别,请按照以下步骤操作:
- 在您的根目录的
turbo.json
文件中放入所有的键:
"globalEnv": [
"MY_KEY",
"MY_OTHER_KEY"
],
//a. ".env" 是默认值,除非您有一个自定义的 .env 文件名称,否则不需要以下行。例如 .env.local
//b. 请注意,以下行中的 "globalDependencies" 是指您的应用程序文件夹下的 .env 文件,而不是根目录下的文件。
"globalDependencies": [".env.local"]
- 在您的 Web 项目中,将您的
.env
或.env.local
文件放在那里。
MY_KEY='SOMETHING'
MY_OTHER_KEY='SOMETHING ELSE'
- 清空缓存文件夹中的所有缓存(以防万一),然后运行:
turbo run dev --filter=my-web-project
就这样,您的 Web 应用程序将使用应用程序文件夹中的环境文件,而不是使用根目录中的文件。
参考链接:https://turbo.build/repo/docs/reference/configuration#globalEnv
英文:
Not sure how to run both root and app level, but if you want just the app level, do the following:
- in your root
turbo.json
put in all the keys:
"globalEnv": [
"MY_KEY",
"MY_OTHER_KEY"
],
//a. ".env" is the default, you don't need the following line unless you have a custom .env file name. e,.g. .env.local
//b. Note "globalDependencies" in the following line is referring to your .env file under the app folder, not the root one.
"globalDependencies": [".env.local"]
- in your web project, put your
.env
or.env.local
file there.
MY_KEY='SOMETHING'
MY_OTHER_KEY='SOMETHING ELSE'
- Clear all your cache in the cache folder (just in case), then run:
turbo run dev --filter=my-web-project
That's it, your web app will pick up the env file in your app folder, not from your root folder.
ref: https://turbo.build/repo/docs/reference/configuration#globalEnv
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论