Next.js导入本地next-i18next.config.ts时尝试从node_modules解析失败
嘿,这个问题我之前帮朋友排查过类似的,咱们一步步来捋清楚怎么解决!
首先,最常见的原因就是模块解析时的扩展名或路径问题,Next.js在找不到本地文件的时候,会默认去node_modules里查找同名模块,这就导致了你碰到的错误。咱们从最容易排查的点开始试:
给导入路径加上完整的文件扩展名
如果你用的是TypeScript,你的配置文件应该是next-i18next.config.ts,那导入的时候别偷懒,把扩展名加上:import { i18n } from './next-i18next.config.ts'要是是JavaScript文件,就加
.js。Next.js在处理ES模块的时候,对于相对路径的文件,有时候需要明确扩展名才能精准定位到本地文件,不然它可能会误以为你要导入node_modules里的包。确认相对路径完全正确
你得看看当前写导入语句的文件在哪个目录,比如如果你的配置文件在项目根目录,而你在pages/index.tsx里导入,那路径应该是../next-i18next.config.ts,而不是./。路径错了的话,Next.js找不到本地文件,自然会去node_modules里碰运气。检查TypeScript/模块解析配置
如果你是TypeScript项目,打开tsconfig.json看看moduleResolution字段,Next.js 13+推荐用node16或者nodenext,要是你用的是旧的node模式,可能会在ES模块和CommonJS模块的解析上出问题。另外,要是你设置了baseUrl,记得相对路径要和这个配置对应上,别因为baseUrl导致路径解析偏离了本地文件。临时换个文件名排查冲突
虽然概率不高,但你可以试试把next-i18next.config.ts改成my-custom-i18n-config.ts,然后导入这个新文件名。如果这样能成功,说明原来的文件名可能和某个依赖包里的模块名巧合冲突了,导致Next.js优先去node_modules找。检查版本兼容性
最后确认一下你的Next.js版本和next-i18next版本是不是匹配的,比如Next.js 14对应的next-i18next最好用v13以上的版本,版本不兼容有时候会引发各种奇怪的解析bug,更新到兼容版本说不定就解决了。
先从加扩展名和检查路径这两步开始试,这两个解决了90%的类似问题!
内容来源于stack exchange

