React Native Metro Bundler报错:Property 'require'不存在
解决Metro Bundler无法向设备打包JS代码的问题
针对你的问题,按以下步骤排查修复:
1. 彻底清理缓存(重点解决index.bundle异常)
之前的缓存重置可能没清理干净,执行这套命令彻底清掉Metro和原生端的缓存:
# 删除Metro深层缓存 rm -rf node_modules/.cache/metro-* # 带强制清理参数启动Metro npx react-native start --reset-cache --clean # 手动删除原生构建缓存 rm -rf ios/build android/build
2. 检查Metro配置是否被篡改
对比正常项目的metro.config.js,重点看这几个配置项:
resolver.sourceExts:是否遗漏了js/ts等核心扩展名resolver.assetExts:是否错误包含了不该打包的文件类型transformer:是否引入了自定义转换器导致打包逻辑异常
如果是引入其他项目后出问题,检查被引入项目是否修改了全局Metro配置。
3. 修复设备与开发机的网络连通性
浏览器能访问http://localhost:8081不代表设备能解析,试试:
- 查看开发机的局域网IP(比如
192.168.1.100) - 在设备浏览器里访问
http://[你的IP]:8081/index.bundle?platform=ios,确认是否能正常加载 - 如果能加载,把iOS项目
AppDelegate.m里的打包URL从localhost换成你的局域网IP;Android则修改MainApplication.java里的对应配置。
4. 手动生成bundle验证打包逻辑
执行命令手动生成iOS平台的bundle,对比正常项目的输出:
npx react-native bundle --platform ios --entry-file index.js --bundle-output ios/main.jsbundle --dev false
如果生成的文件还是异常,检查项目入口文件(index.js/index.tsx)是否被修改,或者是否有第三方依赖干扰了打包流程。
5. 排查依赖冲突
引入其他项目后出问题,大概率是依赖版本不兼容:
- 用
npm list metro-react-native-babel-preset查看Metro相关包的版本,和正常项目统一 - 删掉
package-lock.json/yarn.lock后重新执行npm install,避免锁文件残留的冲突
内容的提问来源于stack exchange,提问作者MArkdsfadfs
相关产品推荐
相关产品推荐

