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.

You write a package.json that looks like this:
{
"name": "simple",
"type": "module",
"exports": {
"import": "./dist/lib.js",
"default": "./dist/lib.cjs"
}
}

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!
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"
}
}
}
