React Native运行时MySQL util模块无法解析错误的解决方法
报错核心原因
这个错误本质是架构选型错误:你在React Native前端项目里直接安装使用了仅适配Node.js服务端环境的mysql包。mysql包依赖Node.js内置的核心模块(包括报错提示找不到的util,以及net、stream、crypto等),React Native运行在移动端JS环境,没有内置这些Node原生模块,Metro打包器默认也不会注入对应polyfill,自然会报模块解析失败。
就算你手动补全所有polyfill,也不应该在RN客户端直连MySQL:数据库账号密码会直接打包进客户端安装包,极易被反编译泄露,同时移动端网络环境复杂,直连数据库的稳定性完全没有保障,属于生产环境绝对禁止的做法。
解决方案
- 标准生产方案:搭建独立后端服务层。使用Node.js/Go/Java/Python等任意后端技术编写HTTP接口,在后端代码中引入
mysql包操作数据库,React Native端只需要通过axios/fetch等工具请求后端接口获取数据即可,所有数据库操作都在服务端完成,既安全又稳定。 - 快速Demo方案:如果只是做本地原型验证不想写后端,不要用
mysql包,选择自带React Native适配SDK的BaaS服务(比如Supabase、Firebase)做数据存储,这类服务的SDK已经做好了移动端环境适配,不会出现Node模块缺失的问题。 - 临时兼容方案(仅本地测试用,绝对不要上生产):手动安装Node核心模块的polyfill,修改Metro配置做模块映射:
- 安装缺失的
util模块:npm install util --save - 打开项目根目录的
metro.config.js文件,添加模块解析配置:const { getDefaultConfig } = require('metro-config'); module.exports = (async () => { const defaultConfig = await getDefaultConfig(); return { ...defaultConfig, resolver: { ...defaultConfig.resolver, extraNodeModules: { util: require.resolve('util/'), // 后续如果再提示其他Node核心模块缺失,按相同格式安装对应polyfill后在这里添加映射 }, }, }; })(); - 清除Metro缓存重启服务:
npx react-native start --reset-cache
- 安装缺失的
内容的提问来源于stack exchange,提问作者Aahil Alwani
相关产品推荐
相关产品推荐

