Не удается подключить клиент apollo к aws appsync

У меня есть веб-приложение, использующее aws appsync в качестве бэкэнда и реагирующее + клиент apollo (v3) в качестве интерфейса. Но когда я пытаюсь подключить клиент apollo к appsync, я получаю сообщение об ошибке из библиотеки:

./node_modules/aws-appsync-react/lib/offline-helpers.js

Модуль не найден: не удается разрешить 'response-apollo' в '/ Users / mypath / web / node_modules / aws-appsync-react / lib'

Вот конфиг для клиента:

import AWSAppSyncClient from "aws-appsync";
import AppSyncConfig from "./aws-exports";

export const apolloClient = new AWSAppSyncClient({
  url: AppSyncConfig.aws_appsync_graphqlEndpoint,
  region: AppSyncConfig.aws_appsync_region,
  auth: {
    type: AppSyncConfig.aws_appsync_authenticationType,
    apiKey: AppSyncConfig.aws_appsync_apiKey,
  },
});

И в моем App.ts:

import { ApolloProvider } from "@apollo/client";
import { Rehydrated } from "aws-appsync-react";
import { apolloClient } from "./apollo";

...
<ApolloProvider client={apolloClient}>
  <Rehydrated>
      <MyApp />
  </Rehydrated>
</ApolloProvider>

Похоже на проблему совместимости?

Я использую "@apollo/client": "^3.1.3", "aws-appsync": "^4.0.0","aws-appsync-react": "^4.0.0",.


person Stanley Luo    schedule 16.08.2020    source источник


Ответы (1)


Это проблема совместимости. Текущая версия aws-appsync не поддерживает apollo-client v3, информацию о ходе работы см. В этой ветке: https://github.com/awslabs/aws-mobile-appsync-sdk-js/issues/448

Лучшее решение: Правильный способ настройки AWSAppSyncClient, Apollo & React

Обратите внимание, что обходной путь использует две устаревшие библиотеки, но его можно немного улучшить следующим образом:

import { ApolloClient, ApolloLink, InMemoryCache } from "@apollo/client";
import { createAuthLink } from "aws-appsync-auth-link";
import { createHttpLink } from "apollo-link-http";
import AppSyncConfig from "./aws-exports";

const url = AppSyncConfig.aws_appsync_graphqlEndpoint;
const region = AppSyncConfig.aws_project_region;
const auth = {
  type: AppSyncConfig.aws_appsync_authenticationType,
  apiKey: AppSyncConfig.aws_appsync_apiKey,
};
const link = ApolloLink.from([
  // @ts-ignore
  createAuthLink({ url, region, auth }),
  // @ts-ignore
  createHttpLink({ uri: url }),
]);
const client = new ApolloClient({
  link,
  cache: new InMemoryCache(),
});

export default client;

person Stanley Luo    schedule 17.08.2020