Propagate symbols data in bundler #4375
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
↪️ Pull Request
Would close #4370 and fix #4318
Instead of finding used imports per bundle, do this directly after inserting the runtimes. By directly updating
asset.meta.symbols
with this information, we can do cross-bundle treeshaking without major changes in the scope-hoisting code itself.I've had to update the runtime mechanism to allow runtimes to insert themselves between an asset and a dependency (so act as a reexporting asset).
Potential downsides:
getUsedExports
is now single-threaded. But this is more of an API problem becauseparcel/packages/bundlers/default/src/DefaultBundler.js
Lines 279 to 281 in afd9efb
is simply running per bundle and the resulting map could be merged later.
🚨 TODO
import("./b.js").then(({ default: b }) => ...);
for testing)For discussion:
DefaultBundler#propagate