Skip to content

[BUG] dedupe not deduplicating some packages at all, some packages only partly or inconsistently #8872

@kkmuffme

Description

@kkmuffme

Is there an existing issue for this?

  • I have searched the existing issues

This issue exists in the latest npm version

  • I am using the latest npm

Current Behavior

find . -type d -name components -path "*/@wordpress/components"
./node_modules/@types/wordpress__edit-post/node_modules/@wordpress/components
./node_modules/@wordpress/media-utils/node_modules/@wordpress/components
./node_modules/@wordpress/components
./node_modules/@wordpress/admin-ui/node_modules/@wordpress/components
./node_modules/@wordpress/dataviews/node_modules/@wordpress/components
./node_modules/@wordpress/reusable-blocks/node_modules/@wordpress/components
./node_modules/@wordpress/patterns/node_modules/@wordpress/components
./node_modules/@wordpress/commands/node_modules/@wordpress/components
./node_modules/@wordpress/plugins/node_modules/@wordpress/components
./node_modules/@wordpress/fields/node_modules/@wordpress/components
./node_modules/@wordpress/editor/node_modules/@wordpress/components
./node_modules/@wordpress/global-styles-ui/node_modules/@wordpress/components
./node_modules/@wordpress/block-editor/node_modules/@wordpress/components
./node_modules/@wordpress/preferences/node_modules/@wordpress/components
./node_modules/@wordpress/interface/node_modules/@wordpress/components
./node_modules/@wordpress/server-side-render/node_modules/@wordpress/components

and npm ls "@wordpress/components"

├─┬ @types/[email protected]
│ └── @wordpress/[email protected]
└─┬ @types/[email protected]
├── @wordpress/[email protected]
└─┬ @wordpress/[email protected]
├─┬ @wordpress/[email protected]
│ └── @wordpress/[email protected]
├─┬ @wordpress/[email protected]
│ └── @wordpress/[email protected]
├── @wordpress/[email protected]
├─┬ @wordpress/[email protected]
│ └── @wordpress/[email protected]
├─┬ @wordpress/[email protected]
│ └── @wordpress/[email protected]
├─┬ @wordpress/[email protected]
│ └── @wordpress/[email protected]
├─┬ @wordpress/[email protected]
│ ├─┬ @wordpress/[email protected]
│ │ └── @wordpress/[email protected]
│ └── @wordpress/[email protected]
├─┬ @wordpress/[email protected]
│ └── @wordpress/[email protected]
├─┬ @wordpress/[email protected]
│ └── @wordpress/[email protected]
├─┬ @wordpress/[email protected]
│ └── @wordpress/[email protected]
├─┬ @wordpress/[email protected]
│ └── @wordpress/[email protected]
├─┬ @wordpress/[email protected]
│ └── @wordpress/[email protected]
└─┬ @wordpress/[email protected]
└── @wordpress/[email protected]

When checking other installed packages with npm ls, it shows deduped correctly or mostly correctly, e.g. npm ls date-fns (however seems to not be 100% correct either, since it's deduped mostly but I still have it like 4 times)

Expected Behavior

Dedupe should actually remove duplicates

This is especially relevant for large packages.
Unfortunately, this bug affects lots of people without them realizing - IDEs and CIs often have large artificial configs (e.g. phpstorm) for their type checks/LSP and the failure to dedupe unnecessarily increases startup (indexing) time as well as memory consumption.

Steps To Reproduce

{
  "dependencies": {
    "@types/wordpress__block-library": "^2.6.3",
    "@types/wordpress__block-serialization-spec-parser": "^3.1.3",
    "@types/wordpress__blocks": "^12.5.18",
    "@types/wordpress__custom-templated-path-webpack-plugin": "^1.4.6",
    "@types/wordpress__customize-browser": "^5.5.5",
    "@types/wordpress__edit-post": "^8.4.2",
    "@types/wordpress__library-export-default-webpack-plugin": "^1.3.5",
    "@types/wordpress__viewport": "^5.5.3",
    "@types/wordpress__wordcount": "^2.4.5"
  }
}

Run (used --no to quiet all irrelevant output)

npm install --install-links --no-bin-links --no-audit --no-fund --prefer-dedupe
npm dedupe --install-links --no-bin-links --no-audit --no-fund
npm prune --install-links --no-bin-links --no-audit --no-fund

Environment

  • npm: 11.7.0
  • Node.js: v20.19.6
  • OS Name: rocky linux 9
  • npm config:
; "global" config from /usr/etc/npmrc

prefix = "/usr"
update-notifier = false

; node bin location = /usr/bin/node
; node version = v20.19.6
; npm local prefix = /path/to/repo
; npm version = 11.7.0
; cwd = /path/to/repo
; HOME = /home/my-user
; Run `npm config ls -l` to show all defaults.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Bugthing that needs fixingNeeds Triageneeds review for next steps

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions