无法解析 Apollo Client 版本 3 的模块

Unable to resolve module for Apollo Client version 3

我刚刚升级到 apollo/client 版本 3

我删除了所有其他 apollo 依赖项,如 apollo hooks 等,我正在从 apollo/client 本身导入所有内容。

我的 App.js 文件在我的 react native 项目中如下所示

import React from 'react';
import {NavigationContainer} from '@react-navigation/native';
import {ApolloProvider} from 'apollo/client';
import TodoStack from './src/components/TodoStack';
import client from './src/client/ApolloClient';

export default () => {
  return (
    <ApolloProvider client={client}>
      <NavigationContainer>
        <TodoStack />
      </NavigationContainer>
    </ApolloProvider>
  );
};

但是当我 运行 我的应用程序时,我收到一条错误消息

我也尝试删除以下步骤

watchman watch-del-all
rm -rf node_modules and run yarn install
yarn start --reset-cache
rm -rf /tmp/metro-*

您需要从“@apollo/client”导入 ApolloProvider 而不是 'apollo/client'。

这里的@很重要。

import React from 'react';
import {NavigationContainer} from '@react-navigation/native';
import {ApolloProvider} from '@apollo/client';
import TodoStack from './src/components/TodoStack';
import client from './src/client/ApolloClient';

export default () => {
  return (
    <ApolloProvider client={client}>
      <NavigationContainer>
        <TodoStack />
      </NavigationContainer>
    </ApolloProvider>
  );
};

抱歉跑题了,但我在正确 @apollo/client 时遇到了类似的错误。

While trying to resolve module `@apollo/client/link/ws` from file `/media/nvme/pro/virtual_coach/coach-expo/plugins/graphqlClient.ts`, the packag
e `/media/nvme/pro/virtual_coach/coach-expo/node_modules/@apollo/client/link/ws/package.json` was successfully found. However, this package itsel
f specifies a `main` module field that could not be resolved (`/media/nvme/pro/virtual_coach/coach-expo/node_modules/@apollo/client/link/ws/ws.cj
s`. Indeed, none of these files exist:                                  

  * /media/nvme/pro/virtual_coach/coach-expo/node_modules/@apollo/client/link/ws/ws.cjs(.native|.ios.ts|.native.ts|.ts|.ios.tsx|.native.tsx|.tsx|
.ios.js|.native.js|.js|.ios.jsx|.native.jsx|.jsx|.ios.json|.native.json|.json)
  * /media/nvme/pro/virtual_coach/coach-expo/node_modules/@apollo/client/link/ws/ws.cjs/index(.native|.ios.ts|.native.ts|.ts|.ios.tsx|.native.tsx
|.tsx|.ios.js|.native.js|.js|.ios.jsx|.native.jsx|.jsx|.ios.json|.native.json|.json)

我为其他有此奇怪错误消息的人发布解决方案。


我从 /node_modules/@apollo/client/link/ws/package.json

比较了 corect package.json
{
  "name": "@apollo/client/link/ws",
  "main": "ws.cjs.js",
  "module": "index.js",
  "types": "index.d.ts",
  "sideEffects": false
}

package.json 抛出错误

{
  "name": "@apollo/client/link/ws",
  "type": "module",
  "main": "ws.cjs",
  "module": "index.js",
  "types": "index.d.ts",
  "sideEffects": false
}

在错误消息中有一长串可能的扩展名。但没有 .cjs。在我可以看到错误的项目中,包目录

中有文件
index.d.ts  index.d.ts.map  index.js  index.js.map  package.json  ws.cjs  ws.cjs.map

但在正确的项目中还有 wc.cjs.js


所以可能在新的包版本中构建 js 文件被删除了,因为没有 package.json 帽子 type: module.

最后我将 @apollo/client 的版本从

降级到 package.json
    "@apollo/client": "^3.4.8",

固定:

    "@apollo/client": "3.4.8",