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 🙏

© 2026 – Pkg Stats / Ryan Hefner

@dtrlanz/gas-bundler

v0.3.3

Published

**GAS Bundler**

Readme

GAS Bundler

A simple bundler for Google Apps Script


Install

npm install @dtrlanz/gas-bundler --save-dev

Usage

This bundler calls esbuild's build function to bundle Google Apps Script projects. However, instead of passing the project entry points, it separates them into server and client entry points based on file extension.

Client side entry points are bundled using a plugin that inlines ECMAScript Modules into <script> tags.

After installing the package, set up a build script build.js.

await build({
    entryPoints: ['src/server.ts', 'src/client.html'],
    outdir: 'out',
});

Then run it as follows:

node ./build.js

With the exception of entryPoints, all other options are passed directly to esbuild (potentially overriding defaults provided by this package). See the esbuild documentation.

Use cases

Google Apps Script projects that serve HTML in any form (e.g., web apps, side panels) include these in the form of .html files. Client-side code typically has to be contained directly in these files or included from dedicated .html files with <script> tags (see Separate HTML, CSS, and JavaScript). This setup has several drawbacks. In particular, it makes it more difficult to develop client-side code in Typescript, and it inhibits sharing code between server and client.

Moreover, Google Apps Script does not support ECMAScript Modules.

This package seeks to address those issues by using esbuild to bundle projects with approporiate default options and a customized HTML plugin that inlines client-side code.

Client-side scripts

The HTML loader will inline client-side scripts when bundling HTML files. These script tags must have the attribute type="module".

For example, say you have the following file client.html:

<!DOCTYPE html>
<html>
  <head><meta charset="utf-8"></head>
  <body>
    <script type="module">
        import { message } from './client-script.ts';
        console.log(message);
    </script>
  </body>
</html>

The relevant code would be contained in a file client-script.ts in the same folder:

export const message = 'Hello world';

Attribution & Disclaimer

Google is a trademark of Google LLC. This project is not endorsed by or affiliated with Google in any way.

License

GAS Bundler is released under the MIT license.