You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用@middy/core时Lambda Handler报错:(0 , core_1.default) is not a function

解决Middy在TypeScript+Serverless v3+Node.js18中出现(0 , core_1.default) is not a function错误

这个错误的核心原因是Middy v4+采用ESM模块优先设计,而你的项目配置(TypeScript、package.json)仍在CommonJS模式下,或者导入语法不符合ESM规范,导致无法正确识别Middy的默认导出。

以下是分步解决方案:

1. 修正TypeScript配置(tsconfig.json)

将配置调整为ESM兼容模式:

{
  "compilerOptions": {
    "target": "ES2022",
    "module": "ESNext",
    "moduleResolution": "NodeNext",
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "outDir": "./dist",
    "strict": true,
    "skipLibCheck": true
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules"]
}

2. 配置package.json为ESM模块

添加"type": "module"字段,明确项目使用ESM:

{
  "name": "middy-lambda-example",
  "type": "module",
  "scripts": {
    "build": "tsc",
    "dev": "serverless offline"
  },
  "dependencies": {
    "@middy/core": "^4.5.0",
    "aws-lambda": "^1.0.7"
  },
  "devDependencies": {
    "@types/aws-lambda": "^8.10.119",
    "@types/node": "^18.17.0",
    "serverless": "^3.34.0",
    "serverless-esbuild": "^1.46.0",
    "serverless-offline": "^12.0.4",
    "typescript": "^5.1.6"
  }
}

注意:确保@middy/core版本在v4以上,v3及以下是CommonJS优先,语法逻辑不同。

3. 修正handler.ts的导入语法

使用ESM标准导入方式引入Middy:

import middy from '@middy/core';
import type { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';

const baseHandler = async (event: APIGatewayProxyEvent): Promise<APIGatewayProxyResult> => {
  return {
    statusCode: 200,
    body: JSON.stringify({ message: 'Hello from Middy!' })
  };
};

export const handler = middy(baseHandler);

4. 调整Serverless配置(serverless.yml)

使用serverless-esbuild插件处理ESM打包,避免CommonJS兼容问题:

service: middy-lambda-service

frameworkVersion: '3'

plugins:
  - serverless-esbuild
  - serverless-offline

provider:
  name: aws
  runtime: nodejs18.x
  region: us-east-1

functions:
  hello:
    handler: src/handler.handler
    events:
      - httpApi:
          path: /hello
          method: get

custom:
  esbuild:
    bundle: true
    minify: false
    sourcemap: true
    platform: node
    target: es2022
    outDir: dist

验证步骤

  1. 执行npm install重新安装依赖
  2. 执行npm run build编译TypeScript代码
  3. 启动本地服务:npm run dev
  4. 访问http://localhost:3000/hello,即可正常返回响应

内容的提问来源于stack exchange,提问作者Sebas Bejenaru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 23:46:12