前置き
新しくインストールしようとするライブラリ(新ライブラリ)と、今までインストールしているライブラリ(旧ライブラリ)に対して、 親ライブラリが必要としているライブラリに対して、旧ライブラリが差異があるため、インストールができません、というエラー。エラー内容
Expo v45.0.0 -> v46.0.0にアップグレードした後、npm installしたら、次のnpmの依存関係のエラーが発生。npm ERR! code ERESOLVE
npm ERR! ERESOLVE unable to resolve dependency tree
npm ERR!
npm ERR! Found: react@18.0.0
npm ERR! node_modules/react
npm ERR! react@"18.0.0" from the root project
npm ERR! peer react@"*" from @react-navigation/bottom-tabs@6.5.2
npm ERR! node_modules/@react-navigation/bottom-tabs
npm ERR! @react-navigation/bottom-tabs@"^6.0.7" from the root project
npm ERR! 31 more (@react-navigation/native, react-native, ...)
npm ERR!
npm ERR! Could not resolve dependency:
npm ERR! peer react@"^16.8.0 || ^17.0.0-rc.1" from @react-stately/checkbox@3.0.3
npm ERR! node_modules/native-base/node_modules/@react-stately/checkbox
npm ERR! @react-stately/checkbox@"3.0.3" from native-base@3.4.25
npm ERR! node_modules/native-base
npm ERR! native-base@"^3.4.3" from the root project
npm ERR!
npm ERR! Fix the upstream dependency conflict, or retry
npm ERR! this command with --force, or --legacy-peer-deps›
npm ERR! to accept an incorrect (and potentially broken) dependency resolution.
npm ERR!
npm ERR! See [Project Root]/.npm/eresolve-report.txt for a full report.
npm ERR! A complete log of this run can be found in:
npm ERR! [Project Root]/.npm/_logs/2022-12-24T08_55_51_874Z-debug.log
エラー内容
まず上から行くと、旧ライブラリ情報が来ます。react@18.0.0が現在のバージョン情報。
npm ERR! Found: react@18.0.0
npm ERR! node_modules/react
npm ERR! react@"18.0.0" from the root project
npm ERR! peer react@"*" from @react-navigation/bottom-tabs@6.5.2
npm ERR! node_modules/@react-navigation/bottom-tabs
npm ERR! @react-navigation/bottom-tabs@"^6.0.7" from the root project
npm ERR! 31 more (@react-navigation/native, react-native, ...)
次に、親ライブラリ情報が来ます。
2行目では、@react-stately/checkbox@3.0.3 が react@"^16.8.0 || ^17.0.0-rc.1" を必要としてます。
ここで親ライブラリが必要としているライブラリ(react@"^16.8.0 || ^17.0.0-rc.1)に対して、
旧ライブラリ(react@18.0.0)が差異があることがわかります。
3~4行目では、 @react-stately/checkbox@3.0.3 がどこから来たのかを示しています。
native-base@3.4.25 から @react-stately/checkbox@3.0.3 が来ているようです。
そのため、解決方法としては、下記が考えられます。
① インストールしようとしている新ライブラリを変更する
native-baseをreact@18.0.0に対応したバージョンにする
② 旧ライブラリのverを変更する
reactをnative-baseに対応したバージョンにする(react@"^16.8.0 || ^17.0.0-rc.1")
③ エラーは無視して、新ライブラリをインストールする
native-base@"^3.4.3をインストールしてみて、使えるか試す。
npm ERR! Could not resolve dependency:
npm ERR! peer react@"^16.8.0 || ^17.0.0-rc.1" from @react-stately/checkbox@3.0.3
npm ERR! node_modules/native-base/node_modules/@react-stately/checkbox
npm ERR! @react-stately/checkbox@"3.0.3" from native-base@3.4.25
npm ERR! node_modules/native-base
npm ERR! native-base@"^3.4.3" from the root project
解決方法
①インストールしようとしている新ライブラリを変更する
native-baseをreact@18.0.0に対応したバージョンにしてみようとしましたが、 native baseでは現在はreact@18.0.0に対応してませんでした。参考)
https://github.com/GeekyAnts/NativeBase/issues/5308
https://github.com/GeekyAnts/NativeBase/issues/5075
https://github.com/GeekyAnts/NativeBase/issues/5543
② 旧ライブラリのverを変更する
react@18.0.0を使いたく、Expo SDK 45 -> 46にしたことが元々だったので、
本来の目的から外れるので、選択肢からは除去。試すのであれば以下。
- "react": "18.0.0",
- "react-dom": "18.0.0",
+ "react": "^17.0.2",
+ "react-dom": "^17.0.2",
参考)
https://blog.expo.dev/expo-sdk-46-c2a1655f63f7
③ エラーは無視して、新ライブラリをインストールする
npm v7以前では、このように一旦インストールした後に、alertを出すやり方だったようです。
一旦解決ですが、力技なので、native-baseの挙動が問題あるか、見ていくことになります。
$ npm install --legacy-peer-deps
実行した後は、このようにalertが出ます。
$ npx expo start
Starting project at /Users/[Project Root]
Some dependencies are incompatible with the installed expo version:
react@17.0.2 - expected version: 18.0.0
react-dom@17.0.2 - expected version: 18.0.0
Your project may not work correctly until you install the correct versions of the packages.
Install individual packages by running npx expo install react@18.0.0 react-dom@18.0.0
参考