You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expo构建Android项目时npm exited with non-zero code:1错误求助

Expo React Native构建时styled-components依赖冲突解决

问题场景

基于Firebase开发CRUD应用,使用Expo框架进行React Native开发,执行eas build -p android --profile preview命令时,Prebuild阶段出现npm exited with non-zero code: 1错误,核心原因是styled-components@5.3.6与react@18.1.0、react-dom存在依赖冲突。

完整错误日志

- Creating native project directories (./ios and ./android) and updating .gitignore
✔ Created native project | gitignore skipped
- Adding Metro bundler config
✔ Added Metro config
- Updating your package.json scripts, dependencies, and main file
✔ Updated package.json and added index.js entry point for iOS and Android
› Removed "main": "node_modules/expo/AppEntry.js" from package.json because we recommend using index.js as main instead
- Config syncing
[stderr] Using node to generate images. This is much slower than using native packages.
[stderr] › Optionally you can stop the process and try again after successfully running `npm install -g sharp-cli`.
- Config syncing
[stderr] » android: userInterfaceStyle: Install expo-system-ui in your project to enable this feature.
- Config syncing
✔ Config synced
Running "npm install" in the root dir of your repository 
[stderr] npm ERR! code ERESOLVE
[stderr] npm ERR! ERESOLVE could not resolve
[stderr] npm ERR! 
[stderr] npm ERR! While resolving: styled-components@5.3.6
[stderr] npm ERR! Found: react@18.1.0
[stderr] npm ERR! node_modules/react
[stderr] npm ERR!   react@"18.1.0" from the root project
[stderr] npm ERR!   peer react@">=16.3.0" from @callstack/react-theme-provider@3.0.8
[stderr] npm ERR!   node_modules/@callstack/react-theme-provider
[stderr] npm ERR!     @callstack/react-theme-provider@"^3.0.7" from react-native-paper@4.12.5
[stderr] npm ERR!     node_modules/react-native-paper
[stderr] npm ERR!       react-native-paper@"^4.12.5" from the root project
[stderr] npm ERR!       1 more (@react-navigation/material-bottom-tabs)
[stderr] npm ERR!   20 more (@react-native-community/masked-view, ...)
[stderr] npm ERR! 
[stderr] npm ERR! Could not resolve dependency:
[stderr] npm
[stderr] ERR! peer react-dom@">= 16.8.0" from styled-components@5.3.6
[stderr] npm ERR! node_modules/styled-components
[stderr] npm ERR!   styled-components@"^5.3.6" from the root project
[stderr] npm ERR!   peer styled-components@">= 2" from babel-plugin-styled-components@2.0.7
[stderr] npm ERR!   node_modules/babel-plugin-styled-components
[stderr] npm ERR!     babel-plugin-styled-components@">= 1.12.0" from styled-components@5.3.6
[stderr] npm ERR! 
[stderr] npm ERR! Conflicting peer dependency: react@18.2.0
[stderr] npm ERR! node_modules/react
[stderr] npm ERR!   peer react@"^18.2.0" from react-dom@18.2.0
[stderr] npm ERR!   node_modules/react-dom
[stderr] npm ERR!     peer react-dom@">= 16.8.0" from styled-components@5.3.6
[stderr] npm ERR!     node_modules/styled-components
[stderr] npm ERR!       styled-components@"^5.3.6" from the root project
[stderr] npm ERR!       1 more (babel-plugin-styled-components)
[stderr] npm ERR! 
[stderr] npm ERR! Fix the upstream dependency conflict, or retry
[stderr] npm ERR! this command with --force, or --legacy-peer-deps
[stderr] npm ERR! to accept an incorrect (and potentially broken) dependency resolution.
[stderr] npm ERR! 
[stderr] npm ERR! See /home/expo/.npm/eresolve-report.txt for a full report.
[stderr] npm ERR! A complete log of this run can be found in:
[stderr] npm ERR!     /home/expo/.npm/_logs/2022-11-29T23_23_53_860Z-debug-0.log
npm exited with non-zero code: 1

项目package.json配置

{
  "name": "crud---",
  "version": "1.0.0",
  "main": "node_modules/expo/AppEntry.js",
  "scripts": {
    "start": "expo start",
    "android": "expo start --android",
    "ios": "expo start --ios",
    "web": "expo start --web",
    "build": "expo build"
  },
  "dependencies": {
    "@react-native-async-storage/async-storage": "~1.17.3",
    "@react-native-community/masked-view": "^0.1.11",
    "@react-navigation/material-bottom-tabs": "^6.2.5",
    "@react-navigation/native": "^6.0.14",
    "@react-navigation/native-stack": "^6.9.2",
    "dotenv": "^16.0.3",
    "expo": "~47.0.8",
    "expo-constants": "^14.0.2",
    "expo-image-picker": "~14.0.2",
    "expo-screen-orientation": "~5.0.1",
    "expo-status-bar": "~1.4.2",
    "firebase": "^9.6.7",
    "formik": "^2.2.9",
    "js-base64": "^3.7.3",
    "lottie-react-native": "^5.1.4",
    "react": "18.1.0",
    "react-native": "0.70.5",
    "react-native-gesture-handler": "^2.8.0",
    "react-native-image-picker": "^4.7.0",
    "react-native-masked-view": "^0.2.0",
    "react-native-paper": "^4.12.5",
    "react-native-progress": "^5.0.0",
    "react-native-safe-area-context": "^4.4.1",
    "react-native-screens": "^3.18.2",
    "react-native-vector-icons": "^9.2.0",
    "react-native-web": "^0.18.10",
    "rn-emoji-keyboard": "^1.1.0",
    "styled-components": "^5.3.6",
    "yup": "^0.32.11"
  },
  "devDependencies": {
    "@babel/core": "^7.12.9"
  },
  "private": true
}

解决方法

1. 升级React版本至18.2.0

冲突根源在于styled-components依赖的react-dom@18.2.0要求react版本为^18.2.0,但当前项目使用的是react@18.1.0。直接升级React版本即可解决:

npm install react@18.2.0

执行完成后,重新运行构建命令。

2. 使用npm兼容参数(临时方案)

如果暂时不想升级React,可以通过--legacy-peer-deps参数让npm忽略peer依赖冲突,直接执行:

eas build -p android --profile preview --npm-args="--legacy-peer-deps"

或者先在本地安装依赖时添加该参数,再执行构建:

npm install --legacy-peer-deps
eas build -p android --profile preview

3. 升级styled-components至最新稳定版

styled-components v6.x对React 18的兼容性更好,同时修复了不少依赖问题。可以尝试升级到最新版(注意v6部分API有变更,需要适配项目代码):

npm install styled-components@latest

内容的提问来源于stack exchange,提问作者Josue Muñoz Avila

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 07:25:19