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

Next.js升级至10.0.8+后getConfig返回undefined报错如何解决

运行时报错说明

项目启动运行后抛出如下错误:
Cannot destructure property 'publicRuntimeConfig' of '(0 , config_1.default)(...)' as it is undefined

对应触发报错的代码片段:

import getConfig from 'next/config';
  
const { publicRuntimeConfig } = getConfig();

异常复现规律:

  • Next.js版本为10.0.7及更低版本时,上述代码可正常运行,能正确读取到publicRuntimeConfig下的配置项
  • 升级Next.js到10.0.8及更高版本后,getConfig()调用始终返回undefined,解构逻辑直接触发上述报错
根本原因

Next.js 10.0.8版本调整了next/config模块的初始化时机:配置对象的挂载依赖Next.js运行时上下文的完成,而文件顶层作用域的代码执行时机早于运行时上下文初始化,因此顶层直接调用getConfig()无法拿到配置对象,会返回undefined。
10.0.7及更早版本不存在这个时序问题,配置在模块加载阶段就已完成挂载,所以顶层调用可以正常取值。

修复方案

禁止在模块顶层作用域直接调用getConfig(),将调用逻辑移动到运行时上下文已就绪的执行位置即可,包括但不限于函数组件内部、类组件生命周期方法、事件回调、业务工具函数内部。

参考写法

函数组件内使用

import getConfig from 'next/config';

export default function SiteFooter() {
  // 组件渲染时运行时已完成初始化,可正常获取配置
  const { publicRuntimeConfig } = getConfig();
  return <footer>备案号:{publicRuntimeConfig.icp}</footer>
}

接口请求工具中使用

import getConfig from 'next/config';

export function fetchApi(path, params) {
  // 接口请求触发时应用早已完成初始化,可正常读取配置
  const { publicRuntimeConfig } = getConfig();
  return fetch(`${publicRuntimeConfig.apiDomain}${path}`, {
    ...params,
    headers: {
      'Content-Type': 'application/json',
      ...params?.headers
    }
  })
}

如果需要全局统一读取配置,可以封装惰性加载的配置工具:

// src/utils/app-config.js
import getConfig from 'next/config';

let cachedConfig = null;
export function getAppRuntimeConfig() {
  if (!cachedConfig) {
    cachedConfig = getConfig();
  }
  return cachedConfig.publicRuntimeConfig;
}

其他业务文件引入getAppRuntimeConfig方法使用即可,注意不要在文件顶层直接调用该方法,需在业务逻辑执行阶段调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:27:34