
next-runtime-env部署实战一次构建、多环境部署的完整落地方案【免费下载链接】next-runtime-envNext.js Runtime Environment Configuration - Populates your environment at runtime rather than build time.项目地址: https://gitcode.com/gh_mirrors/ne/next-runtime-envnext-runtime-env 是专为 Next.js 打造的运行时环境变量配置工具它把环境变量注入到应用运行阶段而不是构建阶段让你用同一个构建产物完成开发、测试、生产多环境部署彻底告别换个环境就重新打包的痛苦。本文将带你走通从安装到多环境部署落地的完整流程。 为什么一次构建、多环境部署如此重要传统 Next.js 的做法是把NEXT_PUBLIC_开头的变量在构建时固化进 JS 产物。这意味着开发、预发、生产各环境配置不同就必须分别构建违反了持续交付中的「Build once, deploy many」原则部署一个环境变更需要重新跑一遍构建流水线耗时且易出错。next-runtime-env 遵循十二因子方法论12-Factor App的思想在每次页面渲染时动态生成环境变量脚本让同一份构建产物可以自由部署到任意环境。 三步快速上手5 分钟完成部署接入第一步安装 next-runtime-env 依赖npm install next-runtime-env # 或 pnpm / yarn pnpm install next-runtime-env 想跑完整示例体验全流程可以克隆仓库到本地运行git clone https://gitcode.com/gh_mirrors/ne/next-runtime-env第二步在根布局注入 PublicEnvScript打开你的根布局文件src/app/layout.tsx在head中放入PublicEnvScript组件// src/app/layout.tsx import { PublicEnvScript } from next-runtime-env; export default function RootLayout({ children }) { return ( html langzh-CN head PublicEnvScript / /head body{children}/body /html ); }它会自动把所有NEXT_PUBLIC_前缀的运行时变量暴露给浏览器无需手动列举。第三步用 env() 读取运行时环境变量任何组件里客户端或服务端都可以用env()工具函数取值use client; import { env } from next-runtime-env; const NEXT_PUBLIC_API_URL env(NEXT_PUBLIC_API_URL); // 直接用于请求接口env()的内部逻辑很聪明见src/script/env.ts浏览器端从window.__ENV读取服务端则直接读process.env真正做到同构Isomorphic连 middleware 里也能用。 完整部署流程一次构建部署到任意环境这是 next-runtime-env 最核心的价值所在。以官方示例examples/with-app-router-context/README.md为蓝本完整流程分三步① 开发环境带环境变量启动NEXT_PUBLIC_FOOdev-value BARdev-api npm run dev② 构建不带任何环境变量npm run build构建产物中不固化任何环境值这就是一次构建的关键。③ 生产环境换一组变量直接启动NEXT_PUBLIC_FOOprod-value BARprod-api npm run start开发、预发、生产只需切换启动时的环境变量构建产物完全通用。部署平台K8s、Serverless、裸机只需管理环境变量CI 流水线里再也不用为每个环境跑一次next build。 两种接入方式怎么选next-runtime-env 提供两条路线源码位于src/script/与src/provider/按团队习惯二选一即可维度脚本方式推荐Context 方式接入组件PublicEnvScript /放在headPublicEnvProvider包裹子组件取值方式env(KEY)函数useEnvContext()Hook使用范围任意位置包括 React 之外仅限 React 组件树内适用场景全局配置、请求库初始化纯组件内消费官方在docs/GETTING_STARTED.md中明确推荐脚本方式——因为环境变量常常需要在非 React 上下文如 API 客户端初始化中使用。 进阶部署向浏览器暴露自定义变量默认只有NEXT_PUBLIC_前缀的变量能暴露到浏览器。如果你的变量命名无法改动有两种方案方案一在next.config.js中批量转公开const { makeEnvPublic } require(next-runtime-env); // FOO 将可用 NEXT_PUBLIC_FOO 访问 makeEnvPublic(FOO); makeEnvPublic([BAR, BAZ]);方案二Next.js 13 的 instrumentation 钩子在src/instrumentation.ts中注册示例见examples/with-app-router-script/src/instrumentation.ts启动时统一声明要公开的变量。此外EnvScript env{{...}}/EnvProvider env{{...}}还能注入任意运行时计算值比如按请求动态生成的配置。注意这类动态取值需要调用noStore()选择动态渲染否则会被静态缓存详细用法见docs/EXPOSING_CUSTOM_ENV.md。 版本选型速查表版本适配的 Next.js路由方案亮点1.xNext.js 12 / 13Pages Router经典方案2.xNext.js 13App Router全面支持 App Router3.xNext.js 14App Router针对 14 的缓存机制优化 ✅ 首选选型建议新项目一律用 3.x 配合 Next.js 14可获得最优的缓存支持。⚠️ 常见坑位与排查清单浏览器里读了非公开变量直接报错env(DB_PASSWORD)在浏览器端会抛出异常——这是刻意设计的安全护栏只有NEXT_PUBLIC_前缀的变量才能上浏览器端。服务端取值后页面被缓存env()在服务端会调用noStore()取消响应缓存确保每次请求都拿到最新变量值若你的页面本来就是静态导出需评估该行为的影响。和 Sentry 等 SDK 配合若 Sentry 客户端配置在 Next.jsScript之前执行环境变量可能尚未就绪。给EnvScript传disableNextScript属性改用原生script标签注入即可。.env文件的正确用法开发阶段可以照常使用.env文件行为与标准 Next.js 一致但生产部署时不要依赖.env打进产物而是由部署平台在运行时注入才能发挥一次构建的全部价值。✅ 小结next-runtime-env 的部署哲学可以概括为一句话构建管代码部署管配置。接入只需三步安装 → 注入PublicEnvScript→ 用env()取值部署阶段则完全解耦一次next build多组环境变量多环境自由切换。对于追求快速交付与流水线简化的 Next.js 团队来说这是目前最轻量的运行时环境变量解决方案。【免费下载链接】next-runtime-envNext.js Runtime Environment Configuration - Populates your environment at runtime rather than build time.项目地址: https://gitcode.com/gh_mirrors/ne/next-runtime-env创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考