You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NX Monorepo库中使用环境变量并导出至多个Next.js应用

解决NX Monorepo中库函数在Next.js应用读取根.env的统一方案

核心原因

NX的Next.js应用默认只会加载自身apps/[app-name]目录下的.env文件,而库的测试环境会自动加载根目录的.env,导致服务启动时库函数读不到根环境变量。

方案1:通过NX配置让Next.js应用加载根.env

  • 在根目录的nx.json中添加env配置,指定要加载的根环境变量文件:
{
  "env": {
    "files": [".env", ".env.local"]
  }
}

这会让所有NX项目(包括Next.js应用)自动加载根目录的这些环境变量文件。

  • 确保Next.js应用的next.config.js保留NX集成逻辑(默认已配置,若自定义配置需保留):
const { withNx } = require('@nx/next');

module.exports = withNx({
  // 其他自定义配置
});

启动nx run myNextJSApp:serve后,Next.js服务端就能读取根.env中的变量,库函数调用时自然能获取到对应值。

方案2:封装统一环境变量模块(更可控)

如果需要更灵活的变量管理,可在libs中单独封装环境变量模块,统一对外提供:

  1. 在libs/config/src/lib/env.js中创建变量读取模块:
export const env = {
  dbHost: process.env.DB_HOST,
  dbUsername: process.env.DB_USERNAME,
  // 按需添加其他环境变量
};
  1. 在libs/api的函数中引入该模块:
import { env } from '@myProject/config';

export const getDatabaseConnection = () => {
  const host = env.dbHost;
  const username = env.dbUsername;
  // ...连接逻辑
  return newDatabaseConnection;
};
  1. 同样按方案1配置nx.json的env字段,确保Next.js应用加载根.env,所有库即可通过统一模块获取变量。

注意事项

  • 服务端专用变量(如数据库信息)无需加NEXT_PUBLIC_前缀,仅客户端使用的变量才需要该前缀。
  • 本地开发优先用.env.local覆盖.env默认值,避免敏感信息提交到版本库。
  • 库的测试环境默认已配置加载根.env,所以nx run api:test能正常读取变量,无需额外修改。

内容的提问来源于stack exchange,提问作者reeslabree

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 15:27:12