Skip to content

v0.17.0

Choose a tag to compare

@Timeless0911 Timeless0911 released this 30 Oct 12:00
· 15 commits to main since this release
647f4d3

Highlights 💡

Improved ESM output

Optimizing ESM output has long been one of the key challenges faced by Rspack. Previously, we relied on module concatenation to optimize ESM outputs, but that approach had several limitations:

  • Impure output – The generated files contained Rspack's runtime code.
  • Prone to errors – Some modules could not be correctly concatenated, leading to unexpected runtime issues.
  • Limited code-splitting support – Split bundles became complex and difficult to analyze or optimize statically.

To address these issues once and for all, we introduced an experimental plugin called EsmLibraryPlugin, purpose-built for constructing clean and efficient ESM libraries:

  • Full control over the bundling process – All modules are linked during compilation, eliminating reliance on Rspack's runtime.
  • Code-splitting support – Code after splitting can be statically analyzed and is tree-shaking friendly.

The image below compares the code splitting output before and after using this plugin — the left side shows the previous output, while the right side shows the cleaner output produced by EsmLibraryPlugin:

Rspack 1.6 ESM output diff

In Rslib, the EsmLibraryPlugin is now integrated out-of-the-box with experiments.advancedEsm enabled to generate ESM output that is high-quality, more friendly to static analysis, and supports code splitting.

export default {
  lib: [
    {
      format: 'esm',
      bundle: true,
      experiments: {
        advancedEsm: true,
      },
    },
  ],
};

Tip

Currently this option only takes effect in bundle mode when format is 'esm'.

What's Changed

New Features 🎉

  • feat: introduce experiments.advancedEsm with Rspack's EsmLibraryPlugin by @JSerFeng in #1273

Other Changes

New Contributors

Full Changelog: v0.16.1...v0.17.0