在turborepo monorepo项目之间共享环境变量

Ada*_*dam 20 environment-variables node.js monorepo turborepo

我已经设置了一个基本的turborepo 项目,我想.env在所有应用程序和一些包之间共享变量。如果我.env在项目的根目录中设置一个文件,所有应用程序和包如何访问它们。或者根据我的要求,我是否需要.env在所有应用程序和包中设置多个文件?

Erw*_*wol 10

截至 22 年 12 月,根据官方turbo文档推荐的执行此操作的方法如下:

  1. cd root-directory-of-your-project
  2. npm add -D dotenv-cli(或用pnpm: pnpm add -D dotenv-cli -w)。
  3. .env在项目的根目录中 创建一个文件。
    • 将您的添加.env到项目的根目录中.gitignore
  4. 将变量添加到新创建的.env文件中。
    • 如果您正在使用,nextjs请记住在公共变量前添加前缀NEXT_PUBLIC_*(例如NEXT_PUBLIC_GOOGLE_ANALYTICS_TOKEN=1234:)。
  5. 在您的turbo.json文件中,添加每个作业所依赖的变量pipeline
    • 例子:
    {
      "$schema": "https://turborepo.org/schema.json",
      "pipeline": {
        "dev:frontend": {
          "outputs": ["dist/**", ".next/**"],
          "env": ["NEXT_PUBLIC_GOOGLE_ANALYTICS_TOKEN"]
        },
        "dev:backend": {
          "outputs": ["dist/**", ".next/**"],
          "env": ["DATABASE_URL"]
        }
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  6. 重新启动本地开发服务器。尝试记录process.env.NEXT_PUBLIC_GOOGLE_ANALYTICS_TOKEN

完成后,项目的结构应类似于以下内容:

apps
    backend     <<< Your backend code. You don't need to keep any .env file here.
    frontend    <<< Your frontend code. You don't need to keep any .env file here.
package.json    <<< Where you should install dotenv-cli as a dev dependency.
turbo.json      <<< Where pipeline jobs and their dependencies on environment variables are specified.
.env            <<< Where all your environment variables will be stored.
Run Code Online (Sandbox Code Playgroud)


han*_*shs 1

globalDependencies您可以在 Turbo 配置中指定该选项或使用--global-depsCLI 标志。

{ 
   // ... rest of the turbo config
   globalDependencies: ['.env']
}
Run Code Online (Sandbox Code Playgroud)

或者

turbo run build --global-deps=".env.*"
Run Code Online (Sandbox Code Playgroud)

文档参考:

https://turborepo.org/docs/reference/configuration#globaldependencies https://turborepo.org/docs/reference/command-line-reference#--global-deps

  • 但它没有加载任何环境变量...... (13认同)