使用@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
验证步骤
- 执行
npm install重新安装依赖 - 执行
npm run build编译TypeScript代码 - 启动本地服务:
npm run dev - 访问
http://localhost:3000/hello,即可正常返回响应
内容的提问来源于stack exchange,提问作者Sebas Bejenaru
相关产品推荐
相关产品推荐

