AWS SDK Javascript v3 требует полифилов Node

Я пытаюсь использовать AWS Translate в своем приложении React, и, похоже, ему требуется много полифилов Node. Предназначен ли AWS SDK только для использования Node.js или мне просто нужно установить около 12 полифилов? Документы AWS, которые я просматриваю, похоже, указывают на то, что их можно прекрасно использовать с кодом React на стороне клиента, и я не вижу никаких примечаний о полифилах или обходных путях браузера.

Импорт:

import { TranslateClient, TranslateTextCommand } from '@aws-sdk/client-translate';

Вот одна из 24 подобных ошибок, которые я вижу при установке и компиляции:

ERROR in ./node_modules/@smithy/util-stream/dist-cjs/sdk-stream-mixin.js 7:15-30
Module not found: Error: Can't resolve 'util' in 'node_modules/@smithy/util-stream/dist-cjs'

BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.
This is no longer the case. Verify if you need this module and configure a polyfill for it.

If you want to include a polyfill, you need to:
        - add a fallback 'resolve.fallback: { "util": require.resolve("util/") }'
        - install 'util'
If you don't want to include a polyfill, you can use an empty module like this:
        resolve.fallback: { "util": false }
 @ ./node_modules/@smithy/util-stream/dist-cjs/index.js 81:24-55
 @ ./node_modules/@smithy/smithy-client/dist-cjs/index.js 134:25-55
 @ ./node_modules/@aws-sdk/client-translate/dist-cjs/index.js 121:27-59
 @ ./app/utils/AmazonTranslate.js 12:0-82 65:23-38 77:30-50

webpack compiled with 24 errors

Если я добавлю следующее в конфигурацию веб-пакета:

fallback: {
    child_process: false,
    crypto: false,
    fs: false,
    http: false,
    http2: false,
    https: false,
    os: false,
    path: false,
    process: false,
    stream: false,
    url: false,
    util: false
}

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

TypeError: Cannot destructure property 'readFile' of 'fs_1.promises' as it is undefined.

Я также попробовал установить node-polyfill-webpack-plugin, но осталось 6 ошибок, связанных с fs, child_process и http2.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
72
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

AWS Translate SDK разработан с учетом возможностей потоковой передачи Node.js, которые изначально не поддерживаются в среде браузера. Хотя Интернет опирается на такие технологии, как WebSockets, Node.js использует собственные модули потоковой передачи.

Для веб-приложений обычной практикой является использование промежуточного сервера для взаимодействия с сервисами AWS. Этот подход не только позволяет избежать раскрытия конфиденциальных учетных данных на стороне клиента, но также устраняет необходимость в полифилах, специфичных для узла. Хотя существуют сценарии, в которых встраивание конфиденциальной информации в локально размещенное веб-приложение может быть приемлемым, AWS в первую очередь ориентирован на случаи использования, включающие взаимодействие на стороне сервера, что может объяснить отсутствие поддержки прямого использования на стороне клиента в некоторых клиентах SDK.

Другие вопросы по теме