使用 TypeScript 构建 Lambda 函数
你可以使用 Node.js 运行时在 Amazon Lambda 中运行 TypeScript 代码。由于 Node.js 不会在本机运行 TypeScript 代码,因此必须首先将 TypeScript 代码转换为 JavaScript。然后,可以使用 JavaScript 文件将您的函数代码部署到 Lambda。您的代码将在包含适用于 JavaScript 的 Amazon SDK 的环境中运行,其中包含来自您管理的 Amazon Identity and Access Management (IAM) 角色的凭证。要了解有关 Node.js 运行时随附的 SDK 版本的更多信息,请参阅 包含运行时的 SDK 版本。
Lambda 支持以下 Node.js 运行时。
Node.js | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
名称 | 标识符 | 操作系统 | 弃用日期 | 阻止函数创建 | 阻止函数更新 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Node.js 20 |
|
Amazon Linux 2023 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Node.js 18 |
|
Amazon Linux 2 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Node.js 16 |
|
Amazon Linux 2 |
2024 年 6 月 12 日 |
2025 年 2 月 28 日 |
2025 年 3 月 31 日 |
主题
设置 TypeScript 开发环境
您可以使用本地集成开发环境 (IDE)、文本编辑器或 Amazon Cloud9 来编写 TypeScript 函数代码。您无法在 Lambda 控制台上创建 TypeScript 代码。
要转换您的 TypeScript 代码,请设置一个编译器,例如 esbuildtsc
),后者与 TypeScript 分发版
在使用 esbuild 时,请注意以下事项:
-
有几个 TypeScript 注意事项
。 -
您必须配置 TypeScript 转换设置,以匹配您计划使用的 Node.js 运行时。有关更多信息,请参阅 esbuild 文档中的目标
。有关演示如何将 Lambda 支持的特定 Node.js 版本设为目标的 tsconfig.json 文件示例,请参阅 TypeScript GitHub 存储库 。 -
esbuild 不执行类型检查。要检查类型,请使用
tsc
编译器。运行tsc -noEmit
或将"noEmit"
参数添加到您的 tsconfig.json 文件,如以下示例中所示。这会将tsc
配置为不发出 JavaScript 文件。在检查类型后,使用 esbuild 将 TypeScript 文件转换为 JavaScript。
例 tsconfig.json
{ "compilerOptions": { "target": "es2020", "strict": true, "preserveConstEnums": true, "noEmit": true, "sourceMap": false, "module":"commonjs", "moduleResolution":"node", "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "isolatedModules": true, }, "exclude": ["node_modules", "**/*.test.ts"] }