在EAS服务器构建APK时react-native-maps出现仅原生模块导入错误
解决EAS构建APK时react-native-maps的原生模块导入错误
在EAS服务器上构建Android APK时,react-native-maps抛出错误,系统误判为在web环境导入仅原生模块,但实际是针对移动端构建。
错误日志
Exporting server λ Bundling failed 8070ms node_modules/expo-router/build/static/getServerManifest.js (1047 modules) Error: Importing native-only module "react-native/Libraries/Utilities/codegenNativeCommands" on web from: /home/expo/workingdir/build/node_modules/react-native-maps/lib/MapMarkerNativeComponent.js Error: Importing native-only module "react-native/Libraries/Utilities/codegenNativeCommands" on web from: /home/expo/workingdir/build/node_modules/react-native-maps/lib/MapMarkerNativeComponent.js at resolver (/home/expo/workingdir/build/node_modules/@expo/cli/src/start/server/metro/withMetroMultiPlatform.ts:585:19) at resolveRequest (/home/expo/workingdir/build/node_modules/@expo/cli/src/start/server/metro/withMetroResolvers.ts:76:29) at firstResolver (/home/expo/workingdir/build/node_modules/react-native-css-interop/src/metro/index.ts:257:26) at firstResolver (/home/expo/workingdir/build/node_modules/@expo/cli/src/start/server/metro/withMetroResolvers.ts:108:16) at resolveRequest (/home/expo/workingdir/build/node_modules/@expo/cli/src/start/server/metro/withMetroResolvers.ts:137:16) at Object.resolve (/home/expo/workingdir/build/node_modules/metro-resolver/src/resolve.js:36:12) at ModuleResolver.resolveDependency (/home/expo/workingdir/build/node_modules/metro/src/node-haste/DependencyGraph/ModuleResolution.js:74:31)
解决方案
- 确认EAS构建配置:检查
eas.json中的build配置,确保platform字段设置为"android",避免构建过程触发web环境的模块解析逻辑。 - 配置Metro解析规则:在
metro.config.js中调整resolver配置,优先解析android平台模块。示例配置:
配套创建const { getDefaultConfig } = require('expo/metro-config'); const config = getDefaultConfig(__dirname); config.resolver.platforms = ['android', 'ios', 'web']; // 将android放在首位 config.resolver.resolveRequest = (context, moduleName, platform) => { if (moduleName.includes('react-native-maps') && platform === 'web') { // 针对web环境返回空模块 return { filePath: require.resolve('./empty-module.js') }; } return context.resolveRequest(context, moduleName, platform); }; module.exports = config;empty-module.js文件,内容为export {}; - 清除构建缓存:执行
eas build --clear-cache,清除EAS服务器和本地构建缓存后重新发起构建。 - 版本兼容性检查:确认
react-native-maps版本与当前Expo SDK版本匹配,必要时升级或降级到兼容版本。
内容的提问来源于stack exchange,提问作者Eric Uche
相关产品推荐
相关产品推荐

