У меня есть лямбда-функция AWS, запускаемая очередью SNS, которая должна извлекать некоторые данные из получаемого сообщения, форматировать его, а затем отправлять в другую очередь SNS. Все работало хорошо, пока я не попытался отправить во вторую очередь. Для этого я установил @aws-sdk/client-sns и попытался отправить простое сообщение. Когда я запускаю код, он выдает следующую ошибку, связанную с невозможностью найти определения TypeScript:
✖ in ./node_modules/@aws-sdk/client-sns/dist-es/index.js 1:0-22
Module not found: Error: Can't resolve './SNS' in '/Users/userName/development/aws-sdk-error/node_modules/@aws-sdk/client-sns/dist-es'
resolve './SNS' in '/Users/userName/development/aws-sdk-error/node_modules/@aws-sdk/client-sns/dist-es'
using description file: /Users/userName/development/aws-sdk-error/node_modules/@aws-sdk/client-sns/package.json (relative path: ./dist-es)
using description file: /Users/userName/development/aws-sdk-error/node_modules/@aws-sdk/client-sns/package.json (relative path: ./dist-es/SNS)
no extension
/Users/userName/development/aws-sdk-error/node_modules/@aws-sdk/client-sns/dist-es/SNS doesn't exist
.ts
/Users/userName/development/aws-sdk-error/node_modules/@aws-sdk/client-sns/dist-es/SNS.ts doesn't exist
tsx
/Users/userName/development/aws-sdk-error/node_modules/@aws-sdk/client-sns/dist-es/SNStsx doesn't exist
as directory
/Users/userName/development/aws-sdk-error/node_modules/@aws-sdk/client-sns/dist-es/SNS doesn't exist
Это упрощенная версия файла, выдающего ошибку:
import { SNSClient, PublishCommand } from '@aws-sdk/client-sns';
export const showError = async () => {
const client = new SNSClient( { region: 'us-west-1' } );
const params = {
Message: 'some text',
TopicArn: 'arn:aws:sns:us-east-1:111111111111:someOtherTopic'
};
try {
await client.send( new PublishCommand( params ));
} catch ( error ) {
}
};
Я искал часы и не смог точно определить проблему, хотя я пытался изменить значения в моем файле tsconfig.json и пробовал несколько версий Node (14.x, 16.x, 18.x), но хотел бы использовать 16.15.0. Любая помощь в выяснении этого будет принята с благодарностью.
Я создал образец репозитория на Github, показывающий ошибку в действии: https://github.com/autoboxer/aws-sdk-ошибка






Похоже, что модули в @aws-sdk/client-sns/dist-es экспортируются из файлов vanilla JS, которые могут быть не получены в зависимости от того, как вы настраиваете разрешение модуля в конфигурации вашего веб-пакета.
Попробуйте добавить .js в массив расширений:
resolve: {
extensions: [ '.ts', '.tsx', '.js' ]
}
Это должно позволить веб-пакету разрешать ванильные модули JS в @aws-sdk/client-sns и, надеюсь, решит и эту проблему.
Это сделало это, большое спасибо @n-devr.