Expo应用提交至Expo Dev构建失败,本地调试构建正常
问题描述
我的Expo应用在本地执行./gradlew clean和./gradlew assembleDebug都能构建成功,但提交到Expo Dev平台构建时失败了。平台日志显示:app:createBundleReleaseJsAndAssets任务执行失败,具体报错是TypeError: (0 , sourceMapString_1.default) is not a function,完整日志如下:
UP-TO-DATE > Task :react-native-community_slider:prepareReleaseArtProfile > Task :react-native-gesture-handler:packageReleaseAssets > Task :react-native-community_slider:mergeReleaseJavaResource > Task :react-native-gesture-handler:prepareLintJarForPublish UP-TO-DATE > Task :react-native-gesture-handler:prepareReleaseArtProfile > Task :react-native-community_slider:syncReleaseLibJars > Task :react-native-community_slider:bundleReleaseLocalLintAar > Task :react-native-community_slider:extractProguardFiles > Task :react-native-community_slider:writeReleaseLintModelMetadata > Task :react-native-gesture-handler:mergeReleaseJavaResource > Task :react-native-gesture-handler:syncReleaseLibJars > Task :react-native-gesture-handler:bundleReleaseLocalLintAar > Task :app:createBundleReleaseJsAndAssets Android Bundling failed 82561ms node_modules/expo-router/entry.js (1689 modules) TypeError: (0 , sourceMapString_1.default) is not a function TypeError: (0 , sourceMapString_1.default) is not a function at Chunk.serializeToAssetsAsync (/home/expo/workingdir/build/node_modules/@expo/metro-config/src/serializer/serializeChunks.ts:455:24) at /home/expo/workingdir/build/node_modules/@expo/metro-config/src/serializer/serializeChunks.ts:621:25 at Array.map (<anonymous>) at serializeChunksAsync (/home/expo/workingdir/build/node_modules/@expo/metro-config/src/serializer/serializeChunks.ts:619:17) at graphToSerialAssetsAsync (/home/expo/workingdir/build/node_modules/@expo/metro-config/src/serializer/serializeChunks.ts:150:26) at /home/expo/workingdir/build/node_modules/@expo/metro-config/src/serializer/withExpoSerializers.ts:263:50 at serializer (/home/expo/workingdir/build/node_modules/@expo/cli/src/start/server/metro/MetroBundlerDevServer.ts:296:12) at MetroBundlerDevServer._bundleDirectAsync (/home/expo/workingdir/build/node_modules/@expo/cli/src/start/server/metro/MetroBundlerDevServer.ts:1026:28) at processTicksAndRejections (node:internal/process/task_queues:95:5) at MetroBundlerDevServer.metroLoadModuleContents (/home/expo/workingdir/build/node_modules/@expo/cli/src/start/server/metro/MetroBundlerDevServer.ts:442:21) > Task :react-native-community_slider:generateReleaseLintModel > Task :app:createBundleReleaseJsAndAssets FAILED > Task :react-native-gesture-handler:extractProguardFiles > Task :react-native-reanimated:configureCMakeRelWithDebInfo[arm64-v8a] > Task :expo-modules-core:buildCMakeRelWithDebInfo[arm64-v8a] FAILURE: Build failed with an exception. * 出错原因: 任务 ':app:createBundleReleaseJsAndAssets' 执行失败。 > 执行命令 'node' 时进程以非零退出码1结束 * 尝试方案: > 加上 --stacktrace 参数获取堆栈跟踪信息。 > 加上 --info 或 --debug 参数获取更多日志输出。 > 加上 --scan 参数获取完整分析报告。 > 访问 https://help.gradle.org 获取更多帮助。 BUILD FAILED in 5m 48s 534个可执行任务: 518个已执行, 16个已是最新状态 Error: Gradle构建失败,原因未知。查看 "Run gradlew" 阶段的日志获取更多信息。
解决方案
对齐Node.js版本:本地和Expo Dev平台的Node版本可能不一致,导致模块导入行为差异。检查项目的
.nvmrc或package.json中的engines字段,明确指定Node版本,确保平台构建时使用和本地一致的版本。锁定source-map依赖版本:报错来自
@expo/metro-config的序列化逻辑,大概率是source-map版本不兼容导致的。在package.json中添加版本锁定:"resolutions": { "source-map": "0.7.4" }然后执行
npm install或yarn install,提交更新后的package-lock.json/yarn.lock到代码仓库。清理缓存并本地预演release构建:
- 执行
npx expo prebuild --clean清理预构建文件 - 删除
node_modules、package-lock.json/yarn.lock,重新安装依赖 - 本地尝试构建release版本:
npx expo run:android --variant release,如果能复现问题,先在本地排查解决,再提交到平台。
- 执行
检查Metro配置:确保项目的
metro.config.js使用官方默认配置,不要自定义序列化逻辑干扰Expo的处理:const { getDefaultConfig } = require('@expo/metro-config'); const config = getDefaultConfig(__dirname); module.exports = config;
内容的提问来源于stack exchange,提问作者Burak Çetin
相关产品推荐
相关产品推荐

