typescript - Vad orsakar att denna Lambda kastar ett fel med aws-sdk Version 3?
Jag har en AWS Lambda-funktion som triggas av en SNS-kö, som ska extrahera viss data från meddelandet den mottar, formatera det och sedan skicka det till en annan SNS-kö. Allting fungerade bra tills jag försökte skicka till den andra kön. För att göra det installerade jag @aws-sdk/client-sns och försökte skicka ett enkelt meddelande. När jag kör koden får jag följande fel relaterat till att TypeScript-definitioner inte kan hittas:
✖ 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
Detta är den förenklade versionen av filen som orsakar felet:
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 ) {
}
};
Jag har letat i timmar och har inte kunnat identifiera problemet, även om jag har försökt ändra värden i min tsconfig.json-fil och har testat flera versioner av Node (14.x, 16.x, 18.x), men vill gärna använda 16.15.0. All hjälp med att lista ut detta skulle uppskattas mycket.
Jag har skapat ett exempelrepo på Github som visar felet i praktiken: https://github.com/autoboxer/aws-sdk-error
Svar #1
Det ser ut som att modulerna inom @aws-sdk/client-sns/dist-es exporteras från vanliga JS-filer, vilket kanske inte plockas upp beroende på hur du konfigurerar modulupplösning i din webpack-konfiguration.
Försök lägga till .js i din extensions-array:
resolve: {
extensions: [ '.ts', '.tsx', '.js' ]
}
Det borde tillåta webpack att lösa de vanilj-JS-modulerna inom @aws-sdk/client-sns, och förhoppningsvis löser det här problemet också.
