Skip to content

fix(arborist): do not install inert optional extraneous shared dependencies#9238

Merged
wraithgar merged 1 commit intorelease/v11from
backport/v11/9221
Apr 15, 2026
Merged

fix(arborist): do not install inert optional extraneous shared dependencies#9238
wraithgar merged 1 commit intorelease/v11from
backport/v11/9221

Conversation

@github-actions
Copy link
Copy Markdown
Contributor

Backport of #9221 to release/v11.

…encies (#9221)

A shared dependency of two or more umet optional dependencies, where no
other package in the tree also depends on that shared package, does not
need to be installed.

This removes packages currently marked as extraneous from trees where
one or more failed-optional (platform-specific) packages share a
transitive dependency, with `@emnapi/runtime` being a good example of
this.

Before:
```
$ node /path/to/cli/bin/npm-cli.js install sharp@0.35.0-rc.2
added 9 packages in 325ms

$ npm ls --all
├─┬ @emnapi/runtime@1.9.2 extraneous
│ └── tslib@2.8.1 deduped
├─┬ @img/sharp-wasm32@0.35.0-rc.2 extraneous
│ └── @emnapi/runtime@1.9.2 deduped
├─┬ sharp@0.35.0-rc.2
│ ├── @img/colour@1.1.0
│ ├── UNMET OPTIONAL DEPENDENCY @img/sharp-darwin-arm64@0.35.0-rc.2
│ ├── UNMET OPTIONAL DEPENDENCY @img/sharp-darwin-x64@0.35.0-rc.2
│ ├── UNMET OPTIONAL DEPENDENCY @img/sharp-freebsd-wasm32@0.35.0-rc.2
│ ├── UNMET OPTIONAL DEPENDENCY @img/sharp-libvips-darwin-arm64@1.3.0-rc.4
│ ├── UNMET OPTIONAL DEPENDENCY @img/sharp-libvips-darwin-x64@1.3.0-rc.4
│ ├── UNMET OPTIONAL DEPENDENCY @img/sharp-libvips-linux-arm@1.3.0-rc.4
│ ├── UNMET OPTIONAL DEPENDENCY @img/sharp-libvips-linux-arm64@1.3.0-rc.4
│ ├── UNMET OPTIONAL DEPENDENCY @img/sharp-libvips-linux-ppc64@1.3.0-rc.4
│ ├── UNMET OPTIONAL DEPENDENCY @img/sharp-libvips-linux-riscv64@1.3.0-rc.4
│ ├── UNMET OPTIONAL DEPENDENCY @img/sharp-libvips-linux-s390x@1.3.0-rc.4
│ ├── @img/sharp-libvips-linux-x64@1.3.0-rc.4
│ ├── UNMET OPTIONAL DEPENDENCY @img/sharp-libvips-linuxmusl-arm64@1.3.0-rc.4
│ ├── UNMET OPTIONAL DEPENDENCY @img/sharp-libvips-linuxmusl-x64@1.3.0-rc.4
│ ├── UNMET OPTIONAL DEPENDENCY @img/sharp-linux-arm@0.35.0-rc.2
│ ├── UNMET OPTIONAL DEPENDENCY @img/sharp-linux-arm64@0.35.0-rc.2
│ ├── UNMET OPTIONAL DEPENDENCY @img/sharp-linux-ppc64@0.35.0-rc.2
│ ├── UNMET OPTIONAL DEPENDENCY @img/sharp-linux-riscv64@0.35.0-rc.2
│ ├── UNMET OPTIONAL DEPENDENCY @img/sharp-linux-s390x@0.35.0-rc.2
│ ├─┬ @img/sharp-linux-x64@0.35.0-rc.2
│ │ └── @img/sharp-libvips-linux-x64@1.3.0-rc.4 deduped
│ ├── UNMET OPTIONAL DEPENDENCY @img/sharp-linuxmusl-arm64@0.35.0-rc.2
│ ├── UNMET OPTIONAL DEPENDENCY @img/sharp-linuxmusl-x64@0.35.0-rc.2
│ ├── UNMET OPTIONAL DEPENDENCY @img/sharp-webcontainers-wasm32@0.35.0-rc.2
│ ├── UNMET OPTIONAL DEPENDENCY @img/sharp-win32-arm64@0.35.0-rc.2
│ ├── UNMET OPTIONAL DEPENDENCY @img/sharp-win32-ia32@0.35.0-rc.2
│ ├── UNMET OPTIONAL DEPENDENCY @img/sharp-win32-x64@0.35.0-rc.2
│ ├── detect-libc@2.1.2
│ └── semver@7.7.4
└── tslib@2.8.1 extraneous

$ du -s node_modules/
28824	node_modules/
```

After:
```
$ node /path/to/cli/bin/npm-cli.js install sharp@0.35.0-rc.2
added 6 packages in 1s

$ npm ls --all
└─┬ sharp@0.35.0-rc.2
  ├── @img/colour@1.1.0
  ├── UNMET OPTIONAL DEPENDENCY @img/sharp-darwin-arm64@0.35.0-rc.2
  ├── UNMET OPTIONAL DEPENDENCY @img/sharp-darwin-x64@0.35.0-rc.2
  ├── UNMET OPTIONAL DEPENDENCY @img/sharp-freebsd-wasm32@0.35.0-rc.2
  ├── UNMET OPTIONAL DEPENDENCY @img/sharp-libvips-darwin-arm64@1.3.0-rc.4
  ├── UNMET OPTIONAL DEPENDENCY @img/sharp-libvips-darwin-x64@1.3.0-rc.4
  ├── UNMET OPTIONAL DEPENDENCY @img/sharp-libvips-linux-arm@1.3.0-rc.4
  ├── UNMET OPTIONAL DEPENDENCY @img/sharp-libvips-linux-arm64@1.3.0-rc.4
  ├── UNMET OPTIONAL DEPENDENCY @img/sharp-libvips-linux-ppc64@1.3.0-rc.4
  ├── UNMET OPTIONAL DEPENDENCY @img/sharp-libvips-linux-riscv64@1.3.0-rc.4
  ├── UNMET OPTIONAL DEPENDENCY @img/sharp-libvips-linux-s390x@1.3.0-rc.4
  ├── @img/sharp-libvips-linux-x64@1.3.0-rc.4
  ├── UNMET OPTIONAL DEPENDENCY @img/sharp-libvips-linuxmusl-arm64@1.3.0-rc.4
  ├── UNMET OPTIONAL DEPENDENCY @img/sharp-libvips-linuxmusl-x64@1.3.0-rc.4
  ├── UNMET OPTIONAL DEPENDENCY @img/sharp-linux-arm@0.35.0-rc.2
  ├── UNMET OPTIONAL DEPENDENCY @img/sharp-linux-arm64@0.35.0-rc.2
  ├── UNMET OPTIONAL DEPENDENCY @img/sharp-linux-ppc64@0.35.0-rc.2
  ├── UNMET OPTIONAL DEPENDENCY @img/sharp-linux-riscv64@0.35.0-rc.2
  ├── UNMET OPTIONAL DEPENDENCY @img/sharp-linux-s390x@0.35.0-rc.2
  ├─┬ @img/sharp-linux-x64@0.35.0-rc.2
  │ └── @img/sharp-libvips-linux-x64@1.3.0-rc.4 deduped
  ├── UNMET OPTIONAL DEPENDENCY @img/sharp-linuxmusl-arm64@0.35.0-rc.2
  ├── UNMET OPTIONAL DEPENDENCY @img/sharp-linuxmusl-x64@0.35.0-rc.2
  ├── UNMET OPTIONAL DEPENDENCY @img/sharp-webcontainers-wasm32@0.35.0-rc.2
  ├── UNMET OPTIONAL DEPENDENCY @img/sharp-win32-arm64@0.35.0-rc.2
  ├── UNMET OPTIONAL DEPENDENCY @img/sharp-win32-ia32@0.35.0-rc.2
  ├── UNMET OPTIONAL DEPENDENCY @img/sharp-win32-x64@0.35.0-rc.2
  ├── detect-libc@2.1.2
  └── semver@7.7.4

$ du -s node_modules/
18336	node_modules/
```

## References

Fixes #8832

(cherry picked from commit 1d058b0)
@github-actions github-actions bot requested a review from a team as a code owner April 15, 2026 18:04
@wraithgar wraithgar merged commit 7e3a66e into release/v11 Apr 15, 2026
@wraithgar wraithgar deleted the backport/v11/9221 branch April 15, 2026 18:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants