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

NextJS i18n组件报错:无法解析'fs'模块问题求助

问题解决:Next.js组件中使用next-i18next出现"Can't resolve 'fs'"错误

问题根源

Next.js的getServerSideProps/getStaticProps仅支持pages目录下的页面文件,组件中直接调用这些方法会触发客户端打包流程——而serverSideTranslations依赖Node.js的fs模块读取本地翻译文件,浏览器环境不存在fs,因此报错。

解决方案

核心思路:页面级完成服务端翻译逻辑,组件通过上下文或props复用翻译数据,既保证SSG/SSR渲染(SEO友好),又避免客户端打包时引入fs。

方案1:页面传递翻译函数给组件

在页面的getStaticProps/getServerSideProps中完成serverSideTranslations调用,将翻译函数t传递给Navbar组件:

// pages/index.js
import { serverSideTranslations } from 'next-i18next/serverSideTranslations';
import Navbar from '../components/navbar';

export default function Home({ t }) {
  return (
    <>
      <Navbar t={t} />
      {/* 页面其他内容 */}
    </>
  );
}

export async function getStaticProps({ locale }) {
  return {
    props: {
      ...(await serverSideTranslations(locale, ['common'])), // 加载对应语言的翻译文件
    },
  };
}
// components/navbar.js
export default function Navbar({ t }) {
  return (
    <nav>
      <a href="/">{t('navbar.home')}</a>
      <a href="/about">{t('navbar.about')}</a>
    </nav>
  );
}

方案2:组件直接使用useTranslation钩子

只要页面已经通过serverSideTranslations加载了翻译数据,组件可以直接用useTranslation复用上下文,服务端渲染时会自动输出翻译后的文本,不影响SEO:

// components/navbar.js
import { useTranslation } from 'next-i18next';

export default function Navbar() {
  const { t } = useTranslation('common');
  return (
    <nav>
      <a href="/">{t('navbar.home')}</a>
      <a href="/about">{t('navbar.about')}</a>
    </nav>
  );
}

关键提醒

不要在非页面组件中使用getStaticProps/getServerSideProps——这些方法是Next.js专为页面级组件设计的服务端数据获取接口,组件中调用必然触发客户端打包环境与Node.js模块的冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 17:12:10