TurboModule在Android上打包后调用报错,但开发模式正常?
我在React Native项目里用TurboModule封装了一个原生模块,开发模式下运行完全没问题。但打包成apk后调用就报错”Cannot read property ‘myTurboModule’ of undefined”,这是为什么呢?
已经按官方文档配置了metro.config.js,添加了module.exports = {
resolver: {
extraNodeModules: require(‘dextrous-react-native-extra-node-modules’)(),
platforms: [‘android’, ‘ios’, ‘native’]
}
}; 也确认模块路径没问题。原生代码在Android Studio里能正确编译,但JS调用始终找不到模块。
错误堆栈显示:TypeError: Cannot read properties of undefined (reading 'MyTurboModule')。试过清除node_modules、重新链接、甚至升级到RN0.72.3都没用,求大佬指点!
metro bundler没有正确地把你的原生模块打包进去。解决方法其实很简单,但很容易被忽略。你需要检查两个地方:
1. 确保你的
TurboModule注册对了在Android端,你的
MyTurboModule必须通过ReactPackage正确注册到MainApplication.java里。比如:然后在
MainApplication.java的Packages列表中加入它:2. 修改
metro.config.js,确保JS端能正确解析路径默认的配置可能不够,你需要手动添加一个
getTransformOptions方法:最后一步也是最容易忽视的:清理所有缓存并重新打包。
我当时就因为漏掉了
metro.config.js的修改,导致打包一直报这个错误。希望你不会再掉进这个坑里!