Я пытаюсь использовать 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.





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