Моя цель - использовать AWS Amplify в Sapper проекте.
Создание проекта Sapper с нуля (с помощью веб-пакета), затем добавление AWS Amplify и запуск егов dev это успех, но при запуске его в рабочем режиме выдается ошибка GraphQL в консоли ( Uncaught Error: невозможно использовать e "__Schema" из другого модуля или области ).
Исправление этой ошибкиеще один ( Uncaught ReferenceError: процесс не определен ).
Решением является обновление GraphQL с 0.13.0 до 14.0.0, к сожалению, GraphQL 0.13.0 является зависимостью AWS Amplify API.
Кто-нибудь знает, что можно сделать, чтобы AWS Amplify работал с Sapper в рабочей среде?
Ссылка на репозиторий с исходными файлами находится здесь: https://github.com/ehemmerlin/sapper-aws-amplify
(извиняюсь за длинный пост, но я хочу быть явным)
Подробные шаги
1 / Создать проект Sapperс помощью веб-пакета (https://sapper.svelte.dev).
npx degit "sveltejs/sapper-template#webpack" my-app
cd my-app
yarn install
2 / Добавить AWS Amplify (https://serverless -stack.com / chapters / configure-aws-ampify.html ) и lodash
yarn add aws-amplify
yarn add lodash
3 / Настройка AWS Amplify (https://serverless -stack.com/chapters/configure-aws-amplify.html)
Создать src / config / aws.js файл конфигурации, содержащий (измените значения с вашим, но работает как естьдля целей данного поста):
export default {
s3: {
REGION: "YOUR_S3_UPLOADS_BUCKET_REGION",
BUCKET: "YOUR_S3_UPLOADS_BUCKET_NAME"
},
apiGateway: {
REGION: "YOUR_API_GATEWAY_REGION",
URL: "YOUR_API_GATEWAY_URL"
},
cognito: {
REGION: "YOUR_COGNITO_REGION",
USER_POOL_ID: "YOUR_COGNITO_USER_POOL_ID",
APP_CLIENT_ID: "YOUR_COGNITO_APP_CLIENT_ID",
IDENTITY_POOL_ID: "YOUR_IDENTITY_POOL_ID"
}
};
Добавьте следующий код к существующему коду в src / client.js :
import config from './config/aws';
Amplify.configure({
Auth: {
mandatorySignIn: true,
region: config.cognito.REGION,
userPoolId: config.cognito.USER_POOL_ID,
identityPoolId: config.cognito.IDENTITY_POOL_ID,
userPoolWebClientId: config.cognito.APP_CLIENT_ID
},
Storage: {
region: config.s3.REGION,
bucket: config.s3.BUCKET,
identityPoolId: config.cognito.IDENTITY_POOL_ID
},
API: {
endpoints: [
{
name: "notes",
endpoint: config.apiGateway.URL,
region: config.apiGateway.REGION
},
]
}
});
4 / Testэто
в dev (пряжа с прогоном dev): работает
в производстве (сборка с пряжей;узел __sapper __ / build): выдает ошибку.
Uncaught Error: Cannot use e "__Schema" from another module or realm.
Ensure that there is only one instance of "graphql" in the node_modules
directory. If different versions of "graphql" are the dependencies of other
relied on modules, use "resolutions" to ensure only one version is installed.
https://yarnpkg.com/en/docs/selective-version-resolutions
Duplicate "graphql" modules cannot be used at the same time since different
versions may have different capabilities and behavior. The data from one
version used in the function from another could produce confusing and
spurious results.
5 / исправляет ее
По указанной ссылке (https://yarnpkg.com/en/docs/selective-version-resolutions) я добавил этот код в файл package.json:
"resolutions": {
"aws-amplify/**/graphql": "^0.13.0"
}
6 / Test it
rm -rf node_modules; yarn install
Выдает еще одну ошибку в консоли (даже в режиме разработки).
Uncaught ReferenceError: process is not defined
at Module../node_modules/graphql/jsutils/instanceOf.mjs (instanceOf.mjs:3)
at \_\_webpack_require\_\_ (bootstrap:63)
at Module../node_modules/graphql/type/definition.mjs (definition.mjs:1)
at \_\_webpack_require\_\_ (bootstrap:63)
at Module../node_modules/graphql/type/validate.mjs (validate.mjs:1)
at \_\_webpack_require\_\_ (bootstrap:63)
at Module../node_modules/graphql/graphql.mjs (graphql.mjs:1)
at \_\_webpack_require\_\_ (bootstrap:63)
at Module../node_modules/graphql/index.mjs (main.js:52896)
at \_\_webpack_require\_\_ (bootstrap:63)
Исправление, данное этимпоток (https://github.com/graphql/graphql-js/issues/1536) - к сожалению, обновление GraphQL с 0.13.0 до 14.0.0. GraphQL 0.13.0 - это зависимость AWS Amplify API.