如何在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中单独封装环境变量模块,统一对外提供:
- 在
libs/config/src/lib/env.js中创建变量读取模块:
export const env = { dbHost: process.env.DB_HOST, dbUsername: process.env.DB_USERNAME, // 按需添加其他环境变量 };
- 在
libs/api的函数中引入该模块:
import { env } from '@myProject/config'; export const getDatabaseConnection = () => { const host = env.dbHost; const username = env.dbUsername; // ...连接逻辑 return newDatabaseConnection; };
- 同样按方案1配置
nx.json的env字段,确保Next.js应用加载根.env,所有库即可通过统一模块获取变量。
注意事项
- 服务端专用变量(如数据库信息)无需加
NEXT_PUBLIC_前缀,仅客户端使用的变量才需要该前缀。 - 本地开发优先用
.env.local覆盖.env默认值,避免敏感信息提交到版本库。 - 库的测试环境默认已配置加载根.env,所以
nx run api:test能正常读取变量,无需额外修改。
内容的提问来源于stack exchange,提问作者reeslabree
相关产品推荐
相关产品推荐

