Skip to content

[Bug]: rspack produces broken code when optimization.mangleExports = "size" and LimitChunkCountPlugin.maxChunks = 1 #13733

@sadan4

Description

@sadan4

System Info

  System:
    OS: Linux 6.19 cpe:/o:nixos:nixos:26.05 26.05 (Yarara)
    CPU: (20) x64 13th Gen Intel(R) Core(TM) i5-13600KF
    Memory: 37.83 GB / 62.63 GB
    Container: Yes
    Shell: 5.9 - /run/current-system/sw/bin/zsh
  Binaries:
    Node: 25.8.2 - /etc/profiles/per-user/meyer/bin/node
    npm: 11.11.1 - /etc/profiles/per-user/meyer/bin/npm
    pnpm: 10.28.2 - /etc/profiles/per-user/meyer/bin/pnpm
    bun: 1.3.11 - /etc/profiles/per-user/meyer/bin/bun
    Deno: 2.6.10 - /etc/profiles/per-user/meyer/bin/deno
  Browsers:
    Brave Browser: 146.1.88.134
    Chromium: 146.0.7680.164
    Firefox: 149.0
    Firefox Developer Edition: 149.0
  npmPackages:
    @rspack/core: rc => 2.0.0-rc.2

I was able to reproduce this on 1.7.5 as well as 2.0.0-rc.2

Details

if optimization.mangleExports is set to "size" and LimitChunkCountPlugin is added with maxChunks set to 1, then rspack will produce invalid code for certain imports.

Input

/// a.js
import { EventEmitter } from "node:events";

class Foo extends EventEmitter {
}
_ = Foo;

import("./b.js")
/// b.js
import * as _ from "node:path";

Output

import*as e from"node:events";import"node:path";var r={359(){}},o={};function t(e){var s=o[e];if(void 0!==s)return s.exports;var n=o[e]={exports:{}};return r[e](n,n.exports,t),n.exports}class s extends e.a{}_=s,Promise.resolve().then(t.bind(t,359));

Notice that Foo extends e.a instead of e.EventEmitter

Reproduce link

https://playground.rspack.rs/#eyJyc3BhY2tWZXJzaW9uIjoiMi4wLjAtcmMuMiIsImlucHV0RmlsZXMiOlt7ImZpbGVuYW1lIjoicnNwYWNrLmNvbmZpZy5qcyIsInRleHQiOiJpbXBvcnQgKiBhcyByc3BhY2sgZnJvbSBcIkByc3BhY2svY29yZVwiXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW50cnk6IFwiLi9hLmpzXCIsXG4gIG91dHB1dDoge1xuICAgIG1vZHVsZTogdHJ1ZSxcbiAgfSxcbiAgb3B0aW1pemF0aW9uOiB7XG4gICAgbWFuZ2xlRXhwb3J0czogXCJzaXplXCIsXG4gIH0sXG4gIHBsdWdpbnM6IFtcbiAgICBuZXcgcnNwYWNrLm9wdGltaXplLkxpbWl0Q2h1bmtDb3VudFBsdWdpbih7XG4gICAgICBtYXhDaHVua3M6IDEsXG4gICAgfSksXG4gIF0sXG4gIGV4dGVybmFscyhjdHgpIHtcbiAgICBpZiAoY3R4LnJlcXVlc3Q/LnN0YXJ0c1dpdGgoXCJub2RlOlwiKSkge1xuICAgICAgcmV0dXJuIGBtb2R1bGUgJHtjdHgucmVxdWVzdH1gO1xuICAgIH1cbiAgfSxcbn07In0seyJmaWxlbmFtZSI6ImEuanMiLCJ0ZXh0IjoiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSBcIm5vZGU6ZXZlbnRzXCI7XG5cblxuY2xhc3MgRm9vIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbn1cbl8gPSBGb287XG5cbmltcG9ydChcIi4vYi5qc1wiKSJ9LHsiZmlsZW5hbWUiOiJiLmpzIiwidGV4dCI6ImltcG9ydCAqIGFzIF8gZnJvbSBcIm5vZGU6cGF0aFwiOyJ9XX0=

Reproduce Steps

see playground link and above details

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions