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

使用TypeScript配置Serverless Lambda部署GraphQL API遇模块错误求助

问题分析与解决

问题1:TypeScript部署时出现「Error: Cannot find module 'lambda'」

核心原因:

  • Serverless框架默认查找编译后的JavaScript文件,但你直接使用未编译的.ts文件,且未配置TypeScript自动编译流程。
  • lambda.ts中导入app的方式错误:app.ts使用export default app导出,你却用import {app} from './app'导入,会导致导入失败,间接引发模块查找问题。

解决步骤:

  1. 安装TypeScript相关依赖
    在项目根目录执行:
    npm install typescript @types/node @types/express @types/cors serverless-plugin-typescript --save-dev
    
  2. 修改serverless.yml,添加TypeScript插件
    加入plugins字段让Serverless自动编译TS:
    service: graphql-api
    
    frameworkVersion: '3'
    
    provider:
      name: aws
      runtime: nodejs18.x # 建议升级,node12已停止维护
      region: us-east-1
    
    plugins:
      - serverless-plugin-typescript
    
    functions:
      serverlessApi:
        handler: lambda.handler
    
  3. 修正lambda.ts的导入语句
    匹配app.ts的默认导出方式:
    import app from './app';
    import {serverless} from 'serverless-http';
    
    export const handler = serverless(app);
    
  4. 添加tsconfig.json(若未存在)
    基础配置示例:
    {
      "compilerOptions": {
        "target": "ES2020",
        "module": "commonjs",
        "outDir": "./dist",
        "strict": true,
        "esModuleInterop": true,
        "skipLibCheck": true,
        "forceConsistentCasingInFileNames": true
      },
      "include": ["*.ts", "api-schema/**/*.ts", "login-middleware.ts"]
    }
    

问题2:转为JavaScript后出现「Cannot find module './app'」

核心原因:仅将lambda.ts改为lambda.js,但app.ts仍为TypeScript文件,Node.js无法直接加载.ts文件,必须先编译为.js。

解决步骤:

  1. 编译所有TypeScript文件为JavaScript
    在项目根目录执行:
    tsc
    
    确保tsconfig.json的outDir指向正确目录(如./dist)。
  2. 调整lambda.js的导入路径
    若编译后的app.js在根目录,保持:
    const app = require('./app');
    const serverless = require('serverless-http');
    
    module.exports.handler = serverless(app);
    
    若编译到dist目录,则修改为:
    const app = require('./dist/app');
    
  3. 更新serverless.yml的handler路径
    若编译到dist目录,handler指向编译后的文件:
    functions:
      serverlessApi:
        handler: dist/lambda.handler
    

额外建议

  • 优先使用维护中的Node.js版本,避免兼容性问题。
  • 部署前用serverless offline在本地测试,提前排查模块导入错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 05:31:23