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

Next.js 13 App Router:如何在不关闭缓存时为单路由禁用构建时静态优化?

Next.js 13 App Router:让运行时环境变量避开构建时预渲染的问题

我在使用Next.js 13及App Router开发时,需要给客户端传递服务端运行时的环境变量。目前的实现是在layout.tsx中通过服务端函数读取process.env,再将变量传递给客户端——这个过程无需任何fetch调用或路由处理器,完全在服务端执行,理论上拿到的应该是服务端运行时的环境变量。

但现在遇到了核心问题:Next.js会在构建时对layout.tsx做静态优化,此时访问的process是Node构建环境,而非我需要的服务端运行时环境。这些变量本身不会变更,应该仅加载一次并缓存,但我不希望组件在构建时被预渲染。

我知道可以通过失效策略(比如设置const dynamic或者添加no-cache的fetch调用)强制layout.tsx变为动态组件,但这不是我想要的解决方案。目前看来,唯一能绕开构建预渲染优化的方式就是禁用缓存,可这又与变量需要缓存的需求冲突。

代码示例

async function getConfig() {
  if (process.env.NEXT_IS_BUILDING === "true") {
    console.log(
      "构建过程的Node环境无法获取应用配置的运行时变量"
    );
  } else {
    const config = process.env; // 此处应获取服务端运行时的process环境
    return config;
  }
}

export default async function RootLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  const appConfig = await getConfig();
  console.log("渲染RootLayout时的应用配置", appConfig);
  return (
    <html lang="en">
      <body>
        <pre>{JSON.stringify(appConfig, null, 2)}</pre>
      </body>
    </html>
  );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:27:21