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

NextJS设置默认区域前缀触发构建错误求助

Next.js Prefixing defaultLocale构建报错:路径出现/default、/_error: /404 问题排查与解决

问题场景

按照Next.js官方文档《Prefixing defaultLocale》指引配置多语言后,执行yarn build触发构建错误,报错路径包含/default、/_error: /404等。已尝试在getStaticProps中添加locale为'default'时返回'fr'的条件判断,但问题仍未解决。

可能的问题点及解决步骤

1. 校验next.config.js的locale配置

确保i18n配置项的参数完全符合规则,重点检查prefixDefaultLocale、defaultLocale和locales的匹配:

module.exports = {
  i18n: {
    locales: ['fr', 'en'],
    defaultLocale: 'fr',
    prefixDefaultLocale: true, // 开启默认语言前缀路由
    localeDetection: false,
  },
}

开启prefixDefaultLocale后,默认语言的路由会强制带上/fr前缀,而非空路径,所有页面的路由生成逻辑必须适配这个规则。

2. 修正getStaticPaths的路径生成逻辑

如果页面使用getStaticPaths预渲染,必须确保生成的路径只包含配置的locale值,绝对不能出现default作为locale的路径条目:

export async function getStaticPaths({ locales }) {
  // 遍历配置的所有locale,自动排除无效的'default'
  const paths = locales.flatMap(locale => [
    { params: { slug: 'article-1' }, locale },
    { params: { slug: 'article-2' }, locale },
  ]);

  return {
    paths,
    fallback: false,
  };
}

Next.js开启prefixDefaultLocale后,会自动将defaultLocale映射为对应语言前缀,无需手动生成locale: 'default'的路径。

3. 优化getStaticProps的locale处理逻辑

不要硬编码默认语言值,直接从配置中读取defaultLocale来处理locale参数,避免配置变更后出现逻辑不一致:

// 从next.config.js中引入i18n配置
const { i18n } = require('../next.config');

export async function getStaticProps({ locale }) {
  // 统一处理locale,避免'default'值进入业务逻辑
  const currentLocale = locale === 'default' ? i18n.defaultLocale : locale;
  // 用处理后的currentLocale拉取对应语言的内容
  const content = await fetchLangContent(currentLocale);

  return {
    props: { content },
  };
}

4. 检查错误页面的多语言适配

_error.js或404.js这类全局错误页面也需要适配多语言配置,确保其数据获取逻辑(如果有)同样遵循locale处理规则:

function ErrorPage({ statusCode }) {
  return (
    <div className="error-page">
      <h1>{statusCode ? `Error ${statusCode}` : 'Unexpected error'}</h1>
    </div>
  );
}

ErrorPage.getInitialProps = ({ res, err }) => {
  const statusCode = res?.statusCode || err?.statusCode || 404;
  return { statusCode };
};

export default ErrorPage;

如果错误页面使用getStaticProps,必须按照前面的逻辑正确处理locale参数,避免生成/default/_error这类无效路径。

5. 清理缓存后重新构建

旧缓存可能残留错误的路由逻辑,执行以下命令清理后再重新构建:

rm -rf .next
yarn build

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 18:42:47