0

我们正在使用 react-i18next 开发一个 Next.js 应用程序进行本地化。我们正在使用next export静态 HTML 导出)。react-i18next 库需要初始化代码,我不知道在哪里调用它。

(我们没有使用 next-i18next,因为它不适用于 next export。)

现在我在一个单独的模块(页面/之外)中进行了初始化。如果我将该模块导入 pages/_app.tsx 并运行构建脚本 ( next build && next export),构建会挂起。当我按 Ctrl-C 时,我得到:

错误:setRawMode EIO

如果我尝试从自定义 Document导入它,也会发生同样的事情。

我目前的解决方法是在 pages/index.tsx 中导入初始化模块——这可行,但感觉不对。

该项目使用 TypeScript 和 yarn v1,并使用create-next-app(以防万一)搭建脚手架。

4

1 回答 1

0

定义应用程序导入似乎是客户端初始化代码的正确位置(根据自定义 Polyfills推断)。

问题是 _app 模块将在next build && next export被调用时执行。异步调用(在我的例子中是 i18next-http-backend)会导致构建脚本挂起。

解决方法是将初始化代码包装在:

if (typeof window !== 'undefined') {
  // initialization code - will only run on client side
}

基于https://flaviocopes.com/nextjs-server-client-code/

这确实意味着初始化代码也不会为 Jest 测试运行,但react-i18next 可以被模拟

于 2021-03-26T17:41:38.813 回答