Skip to content

λ💨 AWS CDK Construct to bundle JavaScript and TypeScript AWS lambdas using extremely fast esbuild.

License

Notifications You must be signed in to change notification settings

floydspace/aws-lambda-nodejs-esbuild

Repository files navigation

λ💨 aws-lambda-nodejs-esbuild

AWS CDK Construct to build Node.js AWS lambdas using esbuild.

CDK Construct NodeJS Build Status Coverage Status npm version semantic-release Mentioned in Awesome CDK

Table of Contents

Features

  • Zero-config: Works out of the box without the need to install any other packages
  • Supports ESNext and TypeScript syntax with transforming limitations (See Note)

Note: The default JavaScript syntax target is set to ES2017, so the final bundle will be supported by all AWS Lambda Node.js runtimes. If you still using an old lambda runtime and have to respect it you can play with esbuild target option, see JavaScript syntax support for more details about syntax transform limitations.

Installation

yarn add --dev @aws-cdk/aws-lambda aws-lambda-nodejs-esbuild
# or
npm install -D @aws-cdk/aws-lambda aws-lambda-nodejs-esbuild

Configure

By default, no configuration required, but you can change esbuild behavior:

  import * as cdk from '@aws-cdk/core';
  import { NodejsFunction } from 'aws-lambda-nodejs-esbuild';

  class NewStack extends cdk.Stack {
    constructor(scope, id, props) {
      super(scope, id, props);

      new NodejsFunction(this, 'NewFunction', {
        esbuildOptions: {
          minify: false, // default
          target: 'ES2017',
        }
      });
    }
  }

Check esbuild documentation for the full list of available options. Note that some options like entryPoints or outdir cannot be overwritten. The package specified in the exclude option is passed to esbuild as external, but it is not included in the function bundle either. The default value for this option is ['aws-sdk'].

Usage

The normal AWS CDK deploy procedure will automatically compile with esbuild:

  • Create the AWS CDK project with cdk init app --language=typescript
  • Install aws-lambda-nodejs-esbuild as above
  • Deploy with cdk deploy

See examples: minimal and complete

Author

Victor Korzunin