Что заставляет эту лямбду выдавать ошибку с aws-sdk версии 3?

У меня есть лямбда-функция 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-ошибка

Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
2
0
25
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Похоже, что модули в @aws-sdk/client-sns/dist-es экспортируются из файлов vanilla JS, которые могут быть не получены в зависимости от того, как вы настраиваете разрешение модуля в конфигурации вашего веб-пакета.

Попробуйте добавить .js в массив расширений:

resolve: {
    extensions: [ '.ts', '.tsx', '.js' ]
}

Это должно позволить веб-пакету разрешать ванильные модули JS в @aws-sdk/client-sns и, надеюсь, решит и эту проблему.

Это сделало это, большое спасибо @n-devr.

autoboxer 16.05.2022 19:54

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