如何在 turborepo 中同时使用根和应用级别的环境文件

huangapple go评论94阅读模式
英文:

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

  1. 你可以将全局环境变量放在monorepo根目录的.env文件中。它们将默认在所有工作区中可用。
  2. 你应该将dotenv-cli包添加为依赖开发包(dev_deps),用于需要包含工作区特定变量的.env文件的工作区。
  3. 更新你的package.json中的脚本:
    • 添加 "with-env": "dotenv -e ./.env --"
    • 更新 "dev": "pnpm with-env next dev"
    • 更新 "build": "pnpm with-env next build"
  4. 从monorepo根目录的.env文件中移除所有特定于工作区的环境变量(并从turbo.jsonglobalEnvs中移除),将包含工作区特定环境变量的.env文件添加到你的工作区到根目录(package.json级别)。
英文:
  1. You can leave your global envs in monorepo root .env file. They will be available in all your workspaces by default.
  2. You should add dotenv-cli package as dev_deps for workspaces that require .env file with workspace-specific variables.
  3. 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"
  1. Remove all workspace-specific envs from monorepo root .env file (and
    from turbo.json globalEnvs and add .env files (with workspace-specific envs) to your workspaces to the root (package.json level).

答案2

得分: 1

不确定如何同时运行根目录和应用程序级别,但如果您只想运行应用程序级别,请按照以下步骤操作:

  1. 在您的根目录的 turbo.json 文件中放入所有的键:
"globalEnv": [
  "MY_KEY",
  "MY_OTHER_KEY"
],
//a. ".env" 是默认值,除非您有一个自定义的 .env 文件名称,否则不需要以下行。例如 .env.local
//b. 请注意,以下行中的 "globalDependencies" 是指您的应用程序文件夹下的 .env 文件,而不是根目录下的文件。
"globalDependencies": [".env.local"]
  1. 在您的 Web 项目中,将您的 .env.env.local 文件放在那里。
MY_KEY='SOMETHING'
MY_OTHER_KEY='SOMETHING ELSE'
  1. 清空缓存文件夹中的所有缓存(以防万一),然后运行:
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:

  1. 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"] 
  1. in your web project, put your .env or .env.local file there.
MY_KEY='SOMETHING'
MY_OTHER_KEY='SOMETHING ELSE'
  1. 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

huangapple
  • 本文由 发表于 2023年1月9日 22:08:56
  • 转载请务必保留本文链接:https://go.coder-hub.com/75058474.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定