使用AWS Amplify部署Expo 50.0.5 React Native Web应用构建失败求助
问题描述
- 本地环境:Node v21.1.0、npm 10.2.0、Expo ~50.0.5
- 本地状态:React Native Web应用运行正常,执行
npx expo export -p web可成功生成dist文件 - 构建故障:AWS Amplify配置Node 18构建时,触发
GLIBC_2.27和GLIBC_2.28版本缺失错误,导致构建失败
相关配置文件
本地package.json(核心依赖片段)
{ "name": "your-app-name", "version": "1.0.0", "main": "expo-router/entry", "scripts": { "start": "expo start", "build": "npx expo export -p web", "web": "expo start --web" }, "dependencies": { "expo": "~50.0.5", "expo-router": "~3.4.6", "react": "18.2.0", "react-dom": "18.2.0", "react-native": "0.73.2", "react-native-web": "~0.19.6" }, "devDependencies": { "@babel/core": "^7.20.0", "@types/react": "~18.2.45", "typescript": "^5.3.0" } }
AWS Amplify构建配置(amplify.yml)
version: 1 frontend: phases: preBuild: commands: - nvm use 18 - npm install build: commands: - npm run build artifacts: baseDirectory: dist files: - '**/*' cache: paths: - node_modules/**/*
完整错误日志
> npm run build > your-app-name@1.0.0 build > npx expo export -p web Starting Metro Bundler Failed to construct transformer: Error: /root/.nvm/versions/node/v18.19.0/lib/node_modules/expo/node_modules/@expo/cli/node_modules/signal-exit/node_modules/which/bin/which: /lib64/libc.so.6: version `GLIBC_2.27' not found (required by /root/.nvm/versions/node/v18.19.0/lib/node_modules/expo/node_modules/@expo/cli/node_modules/signal-exit/node_modules/which/bin/which) /root/.nvm/versions/node/v18.19.0/lib/node_modules/expo/node_modules/@expo/cli/node_modules/signal-exit/node_modules/which/bin/which: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by /root/.nvm/versions/node/v18.19.0/lib/node_modules/expo/node_modules/@expo/cli/node_modules/signal-exit/node_modules/which/bin/which) at Module._extensions..node (node:internal/modules/cjs/loader:1395:18) at Module.load (node:internal/modules/cjs/loader:1149:32) at Module._load (node:internal/modules/cjs/loader:980:12) at Module.require (node:internal/modules/cjs/loader:1163:19) at require (node:internal/modules/cjs/helpers:110:18) at Object.<anonymous> (/root/.nvm/versions/node/v18.19.0/lib/node_modules/expo/node_modules/@expo/cli/node_modules/signal-exit/node_modules/which/index.js:7:13) at Module._compile (node:internal/modules/cjs/loader:1275:14) at Module._extensions..js (node:internal/modules/cjs/loader:1329:10) at Module.load (node:internal/modules/cjs/loader:1143:32) at Module._load (node:internal/modules/cjs/loader:984:12) error Command failed with exit code 1. info Visit https://docs.npmjs.com/cli/commands/npm-run for available options.
解决方案
方案1:升级Amplify构建环境的Node版本到20+
AWS Amplify支持Node 20环境,和本地版本更接近,能规避GLIBC版本不兼容问题。修改amplify.yml:
version: 1 frontend: phases: preBuild: commands: - nvm use 20 - npm install build: commands: - npm run build artifacts: baseDirectory: dist files: - '**/*' cache: paths: - node_modules/**/*
方案2:清理缓存并重新安装依赖
Amplify的缓存可能留存了旧依赖包,导致GLIBC不兼容。在preBuild阶段添加清理命令:
preBuild: commands: - nvm use 18 - rm -rf node_modules package-lock.json - npm install --no-cache
方案3:使用Expo预构建调整构建流程
- 本地执行
npx expo prebuild --platform web生成web原生构建文件 - 修改package.json的build脚本,直接用webpack构建(需确保webpack配置适配Expo Web):
"scripts": { "build": "webpack --mode production" }
方案4:使用自定义构建镜像
选择包含高版本GLIBC的镜像(比如Ubuntu 20.04),在amplify.yml中指定:
version: 1 frontend: phases: preBuild: commands: - nvm use 18 - npm install build: commands: - npm run build artifacts: baseDirectory: dist files: - '**/*' cache: paths: - node_modules/**/* build: image: name: ubuntu:20.04
内容的提问来源于stack exchange,提问作者user1424876
相关产品推荐
相关产品推荐

