4.0.0 • Published 4 months ago

@skyleague/esbuild-lambda v4.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

ESBuild Lambda (@skyleague/esbuild-lambda)

This tool provides a simple means of building artifacts that are packageable for deployment to AWS Lambda. It works together well with the @skyleague/aws-lambda module for Terraform.

Background

After years of working with a hybrid toolchain of Terraform and the Serverless Framework on the AWS cloud, we felt the need for an agnostic tool for packaging AWS Lambda, that could work with both deployment frameworks. Some projects rely heavily on Terraform, with only a single/few Lambda functions, whereas other projects might opt for a hybrid strategy of deploying "persistent" infra like S3/DynamoDB with the use of standardized Terraform modules, and subsequently deploying the runtime application with the Serverless Framework.

Being able to leverage the same build tool for both types of Lambda deployments helps in unifying the toolchain, making it easy to choose the right type of deployment that best fits the project.

Install

Install esbuild-lambda using npm:

 $ npm install --save-dev @skyleague/esbuild-lambda

Usage

Let's get started with a simple example:

// esbuild.config.ts
import { listLambdaHandlers, esbuildLambda } from '@skyleague/esbuild-lambda'

import path from 'node:path'
import { fileURLToPath } from 'node:url'

const __dirname = path.dirname(fileURLToPath(import.meta.url))

async function main() {
    const handlers = await listLambdaHandlers(path.join(__dirname, 'src', 'functions'))
    await Promise.all(handlers.map((fnDir) => esbuildLambda(fnDir, { root: __dirname })))
}
main().catch((err) => {
    console.error(err)
    process.exit(1)
})

Then add the following script to the package.json section for scripts:

// package.json
{
    "scripts": {
        // add this
        "build": "npx ts-node esbuild.config.ts"
    }
}

Finally, run the build script using npm:

$ npm run build

In this basic configuration, the listLambdaHandlers will search for all the index.ts files with an exported handler function, in the provided directory. Then esbuildLambda will run esbuild on each of those handlers, producing a .build/artifacts folder right next to the index.ts, containing the compiled Typescript handler, as well as a cherry-picked package.json with only the dependencies that are actually encountered in the require/import-chain of the index.ts. The package-lock.json will be copied over from the root of the repository, and the cherry-picked package.json will be installed in the artifact directory using npm ci.

This open source library package is part of the SkyLeague modern application delivery stack.

Support

SkyLeague provides Enterprise Support on this open-source library package at clients across industries. Please get in touch via https://skyleague.io.

If you are not under Enterprise Support, feel free to raise an issue and we'll take a look at it on a best-effort basis!

License & Copyright

This library is licensed under the MIT License (see LICENSE.md for details).

If you using this SDK without Enterprise Support, please note this (partial) MIT license clause:

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND

Copyright (c) 2022, SkyLeague Technologies B.V.. 'SkyLeague' and the astronaut logo are trademarks of SkyLeague Technologies, registered at Chamber of Commerce in The Netherlands under number 86650564.

All product names, logos, brands, trademarks and registered trademarks are property of their respective owners. All company, product and service names used in this website are for identification purposes only. Use of these names, trademarks and brands does not imply endorsement.

4.0.0

4 months ago

3.3.1

8 months ago

3.3.0

8 months ago

3.2.0

8 months ago

3.1.0

8 months ago

3.3.4

7 months ago

3.3.3

8 months ago

3.3.2

8 months ago

3.0.0

8 months ago

2.2.1

11 months ago

2.1.2

12 months ago

2.2.0

11 months ago

2.1.1

12 months ago

2.1.3

12 months ago

2.0.4

1 year ago

2.1.0

1 year ago

1.4.5

1 year ago

2.0.3

1 year ago

2.0.1

1 year ago

2.0.0

1 year ago

1.4.4

1 year ago

1.4.3

1 year ago

1.4.2

1 year ago

1.4.1

1 year ago

1.4.0

1 year ago

1.2.0

2 years ago

1.1.1

2 years ago

1.1.0

2 years ago

1.2.4

2 years ago

1.2.3

2 years ago

1.2.2

2 years ago

1.3.0

2 years ago

1.2.1

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago