React Native CLI安装@apollo/client遇graphql依赖冲突的解决问询
我正在开发一个React Native CLI应用,想要使用@apollo/client连接GraphQL服务器。执行安装命令:
npm install @apollo/client graphql
时出现如下错误:
npm ERR! ERESOLVE could not resolve npm ERR! npm ERR! While resolving: parcel-transfer@0.0.1 npm ERR! Found: graphql@14.7.0 npm ERR! node_modules/graphql npm ERR! peer graphql@"^0.11.3 || ^0.12.3 || ^0.13.0 || ^14.0.0 || ^15.0.0" from apollo-link@1.2.14 npm ERR! node_modules/apollo-link npm ERR! apollo-link@"^1.2.14" from graphql-tools@4.0.8 npm ERR! node_modules/graphql-tools npm ERR! graphql-tools@"^4.0.5" from json-graphql-server@2.3.2 npm ERR! node_modules/json-graphql-server npm ERR! json-graphql-server@"^2.3.2" from the root project npm ERR! apollo-link@"^1.0.0" from apollo-client@2.6.10 npm ERR! node_modules/json-graphql-server/node_modules/apollo-client npm ERR! apollo-client@"^2.6.4" from json-graphql-server@2.3.2 npm ERR! node_modules/json-graphql-server npm ERR! json-graphql-server@"^2.3.2" from the root project npm ERR! peer graphql@"^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0" from apollo-utilities@1.3.4 npm ERR! node_modules/apollo-utilities npm ERR! apollo-utilities@"^1.3.0" from apollo-link@1.2.14 npm ERR! node_modules/apollo-link npm ERR! apollo-link@"^1.2.14" from graphql-tools@4.0.8 npm ERR! node_modules/graphql-tools npm ERR! graphql-tools@"^4.0.5" from json-graphql-server@2.3.2 npm ERR! node_modules/json-graphql-server npm ERR! 1 more (apollo-client) npm ERR! apollo-utilities@"^1.0.1" from graphql-tools@4.0.8 npm ERR! node_modules/graphql-tools npm ERR! graphql-tools@"^4.0.5" from json-graphql-server@2.3.2 npm ERR! node_modules/json-graphql-server npm ERR! json-graphql-server@"^2.3.2" from the root project npm ERR! 2 more (apollo-client, apollo-cache) npm ERR! 8 more (express-graphql, graphql-tag, graphql-tools, ...) npm ERR! npm ERR! Could not resolve dependency: npm ERR! @apollo/client@"*" from the root project npm ERR! npm ERR! Conflicting peer dependency: graphql@16.8.0 npm ERR! node_modules/graphql npm ERR! peer graphql@"^15.7.2 || ^16.0.0" from subscriptions-transport-ws@0.11.0 npm ERR! node_modules/subscriptions-transport-ws npm ERR! peerOptional subscriptions-transport-ws@"^0.9.0 || ^0.11.0" from @apollo/client@3.8.2 npm ERR! node_modules/@apollo/client npm ERR! @apollo/client@"*" 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! npm ERR! For a full report see: npm ERR! /home/paulin/.npm/_logs/2023-09-04T22_36_13_101Z-eresolve-report.txt npm ERR! A complete log of this run can be found in: /home/paulin/.npm/_logs/2023-09-04T22_36_13_101Z-debug-0.log paulin@bkjp-hp-envy:~/projects/Betfien-Inc/parcel-transfer/frontend/android/app$
请问React Native是否已预装graphql和apollo?该如何解决这个依赖冲突问题?
React Native是否预装graphql和apollo?
React Native CLI默认不会预装graphql或任何Apollo相关包(包括@apollo/client)。你项目里已存在的graphql@14.7.0是来自你安装的json-graphql-server依赖,它本身依赖旧版本的GraphQL和Apollo相关库。
解决依赖冲突的方法
方法1:使用
--legacy-peer-deps参数安装
这是最快捷的临时解决方式,适合快速推进开发:npm install @apollo/client graphql --legacy-peer-deps该参数会让npm忽略peer依赖版本冲突,采用旧的peer依赖解析逻辑,避免因为版本不匹配导致的安装失败。
方法2:升级
json-graphql-server(如果可行)
查看json-graphql-server是否有支持更高版本GraphQL的更新版本,执行升级命令:npm update json-graphql-server如果新版本兼容
graphql@16.x,就能从根源解决冲突。方法3:指定兼容的GraphQL版本
安装与json-graphql-server兼容的GraphQL版本,同时确保该版本也满足@apollo/client的要求。@apollo/client@3.x支持graphql@^15.7.2 || ^16.0.0,而json-graphql-server@2.3.2依赖的graphql-tools@4.0.8支持到graphql@^15.0.0,所以可以安装graphql@15.x版本:npm install @apollo/client graphql@15.8.0这个版本同时满足两边的peer依赖要求,能避免冲突。
方法4:移除
json-graphql-server(如果不再需要)
如果你的项目已经不需要本地模拟的GraphQL服务器,可以直接移除它:npm uninstall json-graphql-server之后再重新安装
@apollo/client和graphql即可正常完成:npm install @apollo/client graphql
内容的提问来源于stack exchange,提问作者Jules Betfien

