发布于 2026-01-06 9 阅读
0

闪电般快速且简单的 TypeScript 无服务器构建

闪电般快速且简单的 TypeScript 无服务器构建

缓慢的构建过程造成的损失远不止浪费时间。几秒钟之后,你可能就会忍不住去查看 Slack,不知不觉几分钟就过去了。时间再长一点,你可能就会在 Reddit 上消磨 20 分钟。快速构建意味着更快的反馈循环,以及因分心而不得不切换上下文的风险更低。

esbuild一个“速度极快的 JavaScript 打包器”,在本教程中,我将向您展示如何为 Typescript Serverless Framework项目实现极快的构建速度,同时大幅降低配置的复杂性,与其他替代方案相比。

esbuild 性能比较

演示项目

让我们从一个空文件夹开始,运行命令npm init -y初始化一个新项目。接下来,我们创建一个函数作为 Lambda 处理程序,代码如下src/function.ts

// src/function.ts
export const handler = async (event) => {
  console.log(event);
  return {
    status: 200
  };
};
Enter fullscreen mode Exit fullscreen mode

由于我们将使用 Serverless 和 esbuild 来打包和部署我们的应用程序,因此我们需要安装 Serverless 和 Serverless esbuild 插件npm install serverless serverless-esbuild --save-dev

最后,要部署我们的应用程序,我们只需要创建一个serverless.yml

# serverless.yml
service: esbuild-demo

plugins:
  - serverless-esbuild

provider:
  name: aws
  runtime: nodejs14.x

functions:
  function:
    handler: src/function.handler
Enter fullscreen mode Exit fullscreen mode

现在我们可以运行npx serverless deploy应用程序,让它在 AWS 上启动并运行——已完成转译、三次摇晃,一切就绪。无需额外配置,当然,您也可以根据需要配置 esbuilds 的行为tsconfig.json。转译目标会自动从 Serverless 提供程序设置中的 Lambda 运行时中选择,但如果您已配置目标,它也会自动发现并执行。

使用 Jest 设置单元测试同样简单。首先,我们需要添加 Jest、Jest 类型和 Jest esbuild 转换器:

npm install jest esbuild-jest @types/jest --save-dev

然后配置 Jest 以使用 esbuild 转换器:

// jest.config.json
{
  "transform": {
    "^.+\\.(j|t)sx?$": "esbuild-jest"
  }
}
Enter fullscreen mode Exit fullscreen mode

我们现在也可以编写 TypeScript 单元测试了:

// tests/function.test.ts
import { handler } from '../src/function';

describe('[function]', () => {
  it('should return status 200', async () => {
    const res = await handler(null)
    expect(res).toEqual({
      status: 200
    });
  });
});
Enter fullscreen mode Exit fullscreen mode

并用它们运行npx jest

运行 Jest 的屏幕截图

概括

在将几个或复杂或简单的项目从 Webpack 配置迁移过来之后,esbuild 几乎每次都能“即插即用”,完美替代 Webpack。它不仅构建速度显著提升,而且所需的配置也少得多!🚀

您可以在这里找到完整的演示项目

如果您喜欢这篇文章并想了解更多内容,请在 Twitter 上关注我@TastefulElk,我经常在那里撰写关于无服务器技术、AWS 和开发人员效率的文章!

文章来源:https://dev.to/aws-builders/lightning-fast-simple-typescript-serverless-builds-33ed