microbundle-2

Stars
36
Committers
1

Microbundle 2

What if microbundle could figure out how to bundle your library based on the "exports" field you already have to define in your package.json?

And what if it was also absurdly fast, and one 500kb file with a single native dependency?

npm i -g microbundle-2
# or
npx microbundle-2

This is a reimplementation of Microbundle built on ESBuild.

Simple Example

You write a package.json that looks like this:

{
  "name": "simple",
  "type": "module",
  "exports": {
	"import": "./dist/lib.js",
	"default": "./dist/lib.cjs"
  }
}

Multiple entries

Just define your package exports the way you already have to for Node/Vite/etc:

{
  "name": "multi-entry",
  "type": "module",
  "exports": {
    ".": {
      "types": "./dist/lib.d.ts",
      "import": "./dist/lib.js",
      "default": "./dist/lib.cjs"
    },
    "./a": {
      "types": "./dist/a.d.ts",
      "import": "./dist/a.js",
      "default": "./dist/a.cjs"
    },
    "./b": {
      "types": "./dist/b.d.ts",
      "import": "./dist/b.js",
      "default": "./dist/b.cjs"
    }
  }
}

This example has a dynamic import, which you can see produced a ./c chunk. Both the ESM and CJS versions work the same way!

Wildcards/patterns

Wildcard/pattern exports are also supported:

{
  "name": "patterns",
  "type": "module",
  "exports": {
    ".": {
      "types": "./build/index.d.ts",
      "import": "./build/index.js",
      "default": "./build/index.cjs"
    },
    "./lib/*": {
      "types": "./build/lib/*.d.ts",
      "import": "./build/lib/*.js",
      "default": "./build/lib/*.cjs"
    },
    "./components/*": {
      "source": "./lib/components/*.tsx",
      "types": "./build/components/*.d.ts",
      "import": "./build/components/*.js",
      "default": "./build/components/*.cjs"
    }
  }
}