Обработчик не определен или не экспортирован

#node.js #typescript #aws-lambda #babeljs #webpack-5

Вопрос:

при попытке запустить функцию lambda я получаю сообщение об ошибке «out/get-user-messages.обработчик не определен или не экспортирован». загрузив zip, я вижу папку «out» в корне и get-user-messages.js хотя внутри. и я экспортирую обработчик

получить-сообщения пользователя.ts

 import "reflect-metadata";
import { APIGatewayEvent, APIGatewayEventRequestContext, APIGatewayProxyEvent } from "aws-lambda";


export const handler = async (event: APIGatewayProxyEvent, context: APIGatewayEventRequestContext) => { 
/** Code **/
}
 

tsconfig.json

 {
  "compilerOptions": {
    "experimentalDecorators": true,
    "module": "es2015",
    "target": "esnext",
    "noImplicitAny": false,
    "outDir": "./out",
    "strict": false,
    "resolveJsonModule": true,
    "strictNullChecks": false,
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "esModuleInterop": true,    
  },

  "include": ["src/**/*"],
  "exclude": ["node_modules", "**/*.spec.ts", "**/*.test.ts"],
  "paths": {
    "@/*": ["src/*"]
  }
}

 

webpack.config.js

 const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
var path = require('path');

/** @type {import('webpack').Configuration} */
module.exports = {
  mode: "production",
  module: {
    mode: "production",
    rules: [
      {
        test: /.js|.ts|.tsx/,
        exclude: /node_modules/,
        use: 'babel-loader'
        },
    ],
  },
  resolve: {
    extensions: ['*', '.js', '.jsx', '.tsx', '.ts', '.json'],
  },
  module: {
    rules: [
      {
        test: /.(ts|js)x?$/,
        exclude: /node_modules/,
        use: ["babel-loader"]
      }
    ]
  },
  plugins: [new ForkTsCheckerWebpackPlugin()],
  externals: ['aws-sdk'], //avoid un-needed modules since aws-sdk exists in aws lambdas already
  entry: {
    //list of compiled files
    "get-user-messages": path.join(__dirname, "./src/lambda/get-user-messages.ts"),
    "insert-user-message": path.join(__dirname, "./src/lambda/insert-user-message.ts"),
    "mark-read-user-message": path.join(__dirname, "./src/lambda/mark-read-user-message.ts"),
    "get-application-release-notes": path.join(__dirname, "./src/lambda/get-application-release-notes.ts"),
    "insert-application-release-note": path.join(__dirname, "./src/lambda/insert-application-release-note.ts")
  },
  target: 'node',
  output: {
    path: path.join(__dirname, "./out"),
    filename: "[name].js",
    library: "[name]",
    libraryTarget: 'commonjs'
  }
};
 

.babelrc

 {
    "presets": [
      ["@babel/preset-env",{"targets":{"node":"14"}, "modules":false}],
      "@babel/preset-typescript"
    ],
    "sourceType": "unambiguous",
    "plugins": [
        "babel-plugin-transform-typescript-metadata",
        ["@babel/plugin-proposal-decorators", { "legacy": true }],
        "@babel/plugin-proposal-class-properties",
        "@babel/plugin-transform-runtime"
    ]
  }
 

Ответ №1:

проблема заключалась в опции «библиотека» в разделе вывода webpack.config.js, удаление этого позволило мне успешно запустить функцию лямбда