如何在 nx monorepo 库中使用环境变量,导出到多个 Nextjs 应用程序

ree*_*ree 1 environment-variables libs nrwl-nx

我想将一些环境变量加载到我的库中的函数中,然后能够将其重新导出到几个不同的 Nextjs 应用程序。IE

之内libs/api

export const getDatabaseConnection = () => {
  const host = process.env.DB_HOST
  const username = process.env.DB_USERNAME
  ...
  return newDatabaseConnection
}
Run Code Online (Sandbox Code Playgroud)

在 apps/myNextJSApp 内:

import { getDatabaseConnection } from '@myProject/api'

...
const databaseConnection = getDatabaseConnection()
...
Run Code Online (Sandbox Code Playgroud)

当我运行时,nx run myNextJSApp:serve它无法从根目录中的 .env 中提取环境变量,但是如果我运行它,nx run api:test它就完全满意了。我想我可以单独从每个应用程序中提取环境变量,然后将它们作为参数传递到我的库函数中,但这似乎有点乏味,我希望有一个全面的解决方案,我可以使用以下命令构建我的库模块环境变量,并将它们导出到我的 NextJS 应用程序。

小智 6

环境变量不应由多个应用程序共享。而且你最好也不要这样做。您创建的每个应用程序都应该有其环境文件。并且不要直接从库中读取环境。您必须在应用程序中加载环境变量并将其传递给库。

例如,将所需的配置传递给 libs 函数:


// libs/api
export const getDatabaseConnection = ({host, username}) => {
  const host = host
  const username = usename
  ...
  return newDatabaseConnection
}

// apps/nextjs
import { getDatabaseConnection } from '@myProject/api'

...
const databaseConnection = getDatabaseConnection({
  host: process.env.DB_HOST,
  username: process.env.DB_USERNAME
})

Run Code Online (Sandbox Code Playgroud)

这样,您的代码就更具可重用性和可维护性。
正如我所说,永远不要在应用程序之间共享环境变量。