huozhi / bunchee

Zero config bundler for ECMAScript and TypeScript packages
https://npmjs.com/bunchee
946 stars 29 forks source link

[RFC] Shared Bundle #540

Closed huozhi closed 1 week ago

huozhi commented 5 months ago

Background

shared-runtime modules is not ideal for shared chunks spltting as it's fully based on code splitting strategy, when you import different exports from a shared module, they could be split into different chunks instead of being grouped into a same output bundle, event they're in the same group of split chunks.

Thus we need to have an entry as input for a shared module, and then alias it like the other chunks. Since now we have the relative exports in #538 , so we could auto generate shared entries based on a special convention.

Proposal

Add a file starting with _ to indicate shared module, e.g. _mod.js or _mod/index.js will be shared across entries. Usually leading underscore _ can deliver a private module vibe.

Then bunchee should create a bundle for _shared, where input file is ./src/_shared.js. And the rest follows the rules of normal entries. This could improve the shared modules story and without adding much new convention or patterns to memorize

amannn commented 3 months ago

That would sound great to me!

I just ran into an issue with shared modules again, where 3 entry points import from a shared runtime, but somehow 3 copies of the shared runtime end up in the dist folder (one for each entry point).

I'll try to work around it by moving the shared runtime to another entry point for the time being, but imports would sound really cool 👍