npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

cdk-bundle-analyzer

v0.1.1

Published

A library that delivers tools to analyze the bundle size of TypeScript/JavaScript CDK functions.

Downloads

478

Readme

CDK Bundle Analyzer

A library that delivers tools to analyze the bundle size of TypeScript/JavaScript CDK functions.

Prerequisites 📓

  1. Use the NodejsFunction construct to define functions
  2. Have local bundling enabled. Basically, this means that the bundling of the lambdas is done on the machine, not inside a docker container. To achieve that, esbuild must be installed in the project. Follow the link above for more details.

Usage 📦

Install with

pnpm add -D cdk-bundle-analyzer

Add the following CDK aspect after the CDK app definition:

import { NodeJsFunctionBundleAnalyzerAspect } from 'cdk-bundle-analyzer';

const app = new App();

// ...

Aspects.of(app).add(new NodeJsFunctionBundleAnalyzerAspect());

Add the metafile option to the NodejsFunction to analyze:

new NodejsFunction(this, 'MyFunction', {
  entry: 'src/index.ts',
  metafile: true,
});

Run the following command to analyze the bundle:

cdk synth --quiet -c analyze=Health

A browser window will open with the bundle size analysis 🎉

Options 🛠

For easier DX, the options must be passed as CDK context variables, directly when running the cdk synth command.

The following options are available:

analyze

The name of the function to analyze. If not specified, no function will be analyzed.

Example:

cdk synth --quiet -c analyze=Health

template

The bundle template to use. Should be one of sunburst, treemap, network. Defaults to treemap.

Example:

cdk synth --quiet -c analyze=Health -c template=sunburst

Custom NodejsFunction construct 🏗️

If using a custom construct that extends the NodejsFunction construct, simply pass the custom construct that extends the NodejsFunction construct to the NodeJsFunctionBundleAnalyzerAspect constructor.

For example:

import { NodeJsFunctionBundleAnalyzerAspect } from 'cdk-bundle-analyzer';

const app = new App();

// ...

class MyCustomNodejsFunction extends NodejsFunction {
  // ...
}

// ...

Aspects.of(app).add(
  new NodeJsFunctionBundleAnalyzerAspect({
    customFunctionConstruct: MyCustomNodejsFunction,
  }),
);

Remarks 📝

  • The NodeJsFunctionBundleAnalyzerAspect will have no effect on the CDK app whatsoever. It will not change the behavior of the CDK app in any way. Moreover, the side-effect that generates the bundle analysis will only be executed if the analyze context variable is specified. Thus it is safe to add the aspect to the CDK app and commit it to the repository.
  • The metafile option is required to be set to true in the NodejsFunction construct. This is because the aspect needs to read the esbuild metafile to analyze the bundle. If committed, this means that the resulting metafile will be included in the lambda's deployment package. Its size is approximately the same as the bundle size. It is up to the user to decide if this is acceptable or not to commit.

Using the Serverless Framework instead of the CDK? 🤔

No worries! Check out my plugin serverless-analyze-bundle-plugin that does the same thing for the Serverless Framework 🚀