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

AWS CDK Code Pipeline开发遇TypeScript TS2307错误求助

问题描述

本地执行cdk deploy --all可成功部署所有栈,但CodeBuild过程中抛出TypeScript编译错误:

src/lambda-handlers/queue-consumers/intoMagentoQueueConsumer/index.ts(3,75): error TS2307: Cannot find module '@aws-sdk/client-sfn' or its corresponding type declarations.

相关代码信息:

  • Lambda导入语句:
import { SFNClient, SendTaskSuccessCommand, SendTaskFailureCommand } from "@aws-sdk/client-sfn";
  • Lambda函数的package.json:
{
  "name": "intomagentoqueueconsumer",
  "module": "commonjs",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@aws-sdk/client-sfn": "^3.226.0",
    "axios": "^1.2.1",
    "axios-retry": "^3.3.1"
  }
}
  • CDK中Lambda函数的定义:
this.intoMagentoQueueConsumer = new NodejsFunction(this, `intoMagentoQueueConsumer`, {
  runtime: Runtime.NODEJS_16_X,
  handler: "handler",
  depsLockFilePath: join(__dirname, "../../src/lambda-handlers/queue-consumers/intoMagentoQueueConsumer/package-lock.json"),
  entry: join(__dirname, "../../src/lambda-handlers/queue-consumers/intoMagentoQueueConsumer/index.ts"),
  bundling: { minify: false, nodeModules: ["@aws-sdk/client-sfn", "axios", "axios-retry"], externalModules: ["aws-sdk", "crypto-js"] },
});
解决方案

以下是针对性的排查和修复步骤:

  1. 补充CodeBuild的依赖安装步骤
    本地部署时依赖已提前安装,但CodeBuild是全新环境,需确保构建规范(buildspec.yml)中包含依赖安装命令:
phases:
  install:
    commands:
      # 切换到Lambda函数所在目录执行安装(根据实际路径调整)
      - cd src/lambda-handlers/queue-consumers/intoMagentoQueueConsumer && npm install
  1. 校验TypeScript配置与依赖兼容性
    虽然AWS SDK v3自带类型声明,但可能存在环境版本不兼容:
  • 检查本地tsconfig.json的moduleResolution是否设为node,target是否兼容Node.js 16(如ES2020);
  • 确保CodeBuild使用的TypeScript版本与本地一致,可在package.json中锁定typescript版本并加入到依赖中。
  1. 调整CDK NodejsFunction的打包配置
    当前配置将@aws-sdk/client-sfn标记为外部依赖(保留在nodeModules中),但CodeBuild编译时需要该模块做类型检查:
  • 若无需保留外部依赖,可从nodeModules数组中移除该包,让esbuild自动打包进Lambda代码;
  • 若需保留外部依赖,需确保CodeBuild环境中全局或对应目录下已安装该依赖。

同时验证depsLockFilePath的路径在CodeBuild环境中是否有效,可尝试使用项目根目录为基准的相对路径,避免__dirname带来的路径差异。

  1. 清理CodeBuild缓存
    缓存可能导致依赖未更新,可在CodeBuild项目设置中临时禁用缓存,或手动清理缓存后重新触发构建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:55:12