React Native 0.63.4运行报错Unable to resolve module util解决方案咨询
问题根因
这个报错的核心原因是项目依赖的bson包默认导入了Node.js原生核心模块util,但React Native运行环境不内置这类Node服务端核心模块,升级npm后依赖版本漂移导致触发了该问题。你贴出的报错代码是bson包内部调用util相关特性的逻辑,不属于业务代码问题,无需修改业务代码。
排查步骤
- 执行
npm ls bson或yarn why bson,确认是哪个业务依赖间接安装了bson包,同时记录当前安装的bson版本号,通常mongodb、socket.io这类依赖会携带bson作为子依赖。 - 若当前
bson版本高于等于4.0.0,即可确认是版本过高带来的RN环境兼容问题。
修复方案
方案1:替换为RN适配的依赖
如果是业务代码直接引入了bson做序列化操作,直接替换为RN适配的bson-rn包,或使用对应SDK的RN专属版本(比如mongodb对应mongodb-stitch-react-native-sdk),从根源避免核心模块依赖问题。
方案2:添加util模块polyfill
- 安装
util的前端兼容包:
npm install util --save # 或用yarn yarn add util
- 若安装后仍报错,修改项目根目录的
metro.config.js,添加模块映射配置:
module.exports = { resolver: { extraNodeModules: { util: require.resolve('util'), // 后续如果有其他Node核心模块(如path、fs等)报错,可在这里对应添加polyfill映射 } }, // 其他原有配置保持不变 };
方案3:强制锁定bson低版本
如果bson是第三方依赖的子依赖,无法直接修改版本,可以在package.json中添加配置强制锁定兼容的低版本:
- 若使用yarn,添加
resolutions字段:
{ "resolutions": { "bson": "^3.2.7" } }
- 若使用npm 8.3及以上版本,添加
overrides字段:
{ "overrides": { "bson": "^3.2.7" } }
配置完成后重新安装依赖,再执行你之前的缓存清理步骤重启服务即可生效。
内容的提问来源于stack exchange,提问作者Engr.Aftab Ufaq
相关产品推荐
相关产品推荐

