React Native构建JS bundle时getDevServer模块未找到错误如何解决?
构建JavaScript bundle时出错:
ERROR 20:56
解析模块react-native/Libraries/Core/Devtools/getDevServer时,已找到Haste包react-native,但无法在该包内找到模块Libraries/Core/Devtools/getDevServer。以下文件均不存在:
C:\Users\User\Desktop\repos\native\react-native\Libraries\Core\Devtools\getDevServer(.native|.android.ts|.native.ts|.ts|.android.tsx|.native.tsx|.tsx|.android.js|.native.js|.js|.android.jsx|.native.jsx|.jsx|.android.json|.native.json|.json)C:\Users\User\Desktop\repos\native\react-native\Libraries\Core\Devtools\getDevServer\index(.native|.android.ts|.native.ts|.ts|.android.tsx|.native.tsx|.tsx|.android.js|.native.js|.js|.android.jsx|.native.jsx|.jsx|.android.json|.native.json|.json)
INFO 20:57 正在构建JavaScript bundle
触发原因
- React Native版本不兼容:
getDevServer这个模块的路径在React Native v0.62及之后的版本中发生了调整,旧版本项目、适配旧版RN的第三方依赖如果直接引用了旧路径,在新版RN环境下就会触发找不到模块的报错。 - 依赖缓存异常:metro构建缓存、包管理器缓存存在旧版本依赖的残留映射,导致路径解析错误。
node_modules损坏:安装依赖过程中出现中断、网络异常,导致react-native包的文件缺失。- 自定义配置错误:metro配置、路径别名配置错误,将react-native的解析路径指向了缺少对应文件的本地目录。
- 非正式版RN包问题:如果使用了测试版、自行修改的RN源码包,可能删除或移动了该模块,导致路径不存在。
排查修复方案
- 检查版本匹配关系
- 执行
npx react-native --version确认当前项目的RN版本 - 如果是第三方依赖引用了旧路径,将对应依赖升级到适配当前RN版本的版本即可;如果依赖未适配,可使用
patch-package给依赖打补丁,将旧路径替换为当前RN版本对应的正确路径,也可以降级RN到兼容的旧版本。 - 如果是自己的业务代码直接引用了该旧路径,可以到
node_modules/react-native目录下搜索getDevServer文件的实际位置,替换为正确的引用路径即可,新版RN中该模块一般位于react-native/Libraries/Utilities/getDevServer。
- 执行
- 全量清理缓存重装依赖
按照顺序执行以下操作:- 删除
node_modules目录和对应包管理器的锁文件(package-lock.json/yarn.lock/pnpm-lock.yaml) - 执行
npx react-native start --reset-cache清理metro构建缓存 - 安卓端进入
android目录执行./gradlew clean清理构建缓存,iOS端进入ios目录删除Pods目录和Podfile.lock后执行pod install - 重新执行包管理器的安装命令安装依赖
- 删除
- 检查自定义配置
打开项目根目录的metro.config.js,检查是否配置了错误的resolver.alias别名、haste解析规则,修正指向错误的react-native路径映射;如果是使用自行修改的RN源码包,确认对应路径下存在getDevServer相关文件。 - 临时规避方案
如果需要快速恢复构建,可以在metro.config.js的resolver.alias中添加配置,将react-native/Libraries/Core/Devtools/getDevServer直接指向实际存在的文件路径。
内容的提问来源于stack exchange,提问作者Кирил Кирилов
相关产品推荐
相关产品推荐

