AWS SAM构建Lambda时无法导入@aws-sdk/lib-dynamodb包的问题求助
问题:AWS SAM构建TypeScript Lambda时无法解析@aws-sdk/lib-dynamodb
问题背景
用AWS SAM初始化了TypeScript版Hello World Lambda项目,部署到API Gateway流程正常。修改代码实现DynamoDB读写时,添加了如下导入语句:
import { PutCommand } from "@aws-sdk/lib-dynamodb";
执行sam build命令时触发构建错误:
Build Failed Error: NodejsNpmEsbuildBuilder:EsbuildBundle - Esbuild Failed: ✘ [ERROR] Could not resolve "@aws-sdk/lib-dynamodb" app.ts:5:27: 5 │ import { PutCommand } from "@aws-sdk/lib-dynamodb"; ╵ ~~~~~~~~~~~~~~~~~~~~~~~
查看SAM自动生成的package.json,仅包含开发依赖;执行npm i @aws-sdk/lib-dynamodb后重新构建,错误依旧。
原因分析
- 依赖未被正确记录到package.json:SAM构建时会基于
package.json重新安装依赖,而非直接使用本地node_modules。若依赖未写入package.json的dependencies字段,构建过程会找不到对应包。 - 缺少底层核心依赖:
@aws-sdk/lib-dynamodb是高层封装组件,必须配合底层的@aws-sdk/client-dynamodb使用,单独安装前者会导致解析失败。
修复步骤
1. 安装完整依赖并写入package.json
执行以下命令,同时安装两个必要依赖并确保它们被添加到生产依赖中:
npm install @aws-sdk/client-dynamodb @aws-sdk/lib-dynamodb --save
2. 验证package.json更新
检查package.json,确认两个包出现在dependencies字段中(版本号以实际安装为准):
{ "name": "my-lambda", "version": "1.0.0", // ... 其他原有字段 "dependencies": { "@aws-sdk/client-dynamodb": "^3.400.0", "@aws-sdk/lib-dynamodb": "^3.400.0" }, "devDependencies": { // ... 原有开发依赖 } }
3. 清理构建缓存并重新构建
SAM会缓存构建产物,清理后重新构建确保加载新依赖:
rm -rf .aws-sam/ sam build
额外说明
@aws-sdk/lib-dynamodb提供了Document Client风格的API,自动处理JSON与DynamoDB数据格式的转换,简化读写操作。- SAM的Nodejs构建器通过Esbuild打包所有依赖,确保最终的Lambda部署包包含所需的SDK代码。
内容的提问来源于stack exchange,提问作者hotmeatballsoup
相关产品推荐
相关产品推荐

