Skip to content

[Feature Request]: remove unused import(...) if importee doesn't have side-effects #2827

Description

@sapphi-red

Reproduction link or steps

  1. Open https://stackblitz.com/edit/github-xv4yss-lweea2?file=rolldown.config.mjs,src%2Fdynamic.js,src%2Fentry.js
  2. npm run build runs automatically
  3. dist/dynamic-B5a49wDx.js is an empty file and dist/entry.js imports it.

What is expected?

The empty dist/dynamic-B5a49wDx.js is removed and the import("./dynamic-B5a49wDx.js"); is replaced with Promise.resolve(). Even further, Promise.resolve() can be removed completely in this case because there's no side effect.

What is actually happening?

dist/dynamic-B5a49wDx.js is not removed and the dist/entry.js contains import("./dynamic-B5a49wDx.js");.

System Info

Stackblitz

  System:
    OS: Linux 5.0 undefined
    CPU: (8) x64 Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz
    Memory: 0 Bytes / 0 Bytes
    Shell: 1.0 - /bin/jsh
  Binaries:
    Node: 18.20.3 - /usr/local/bin/node
    Yarn: 1.22.19 - /usr/local/bin/yarn
    npm: 10.2.3 - /usr/local/bin/npm
    pnpm: 8.15.6 - /usr/local/bin/pnpm
  npmPackages:
    rolldown: https://pkg.pr.new/rolldown@01cedb9 => 0.14.0

Any additional comments?

related to #2604, #2826

Metadata

Metadata

Assignees

No one assigned

    Fields

    Priority

    None yet

    Start date

    None yet

    Target date

    None yet

    Effort

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions