npm dedupe reduces duplicate packages by moving shared dependencies up the tree so several parents can use one copy. It does not install new modules or change the ranges in your package.json. Run npm find-dupes first to preview what it would do.
Why duplicates happen
Each package asks for a version range of what it needs. If two parents want overlapping ranges, npm can often satisfy both with one copy. If an older install left an older version at the top and a newer one nested below, you end up with two.
The npm documentation walks through an example. Package a depends on b and d. Both need c, but b wants c@1.0.x and d wants c@~1.0.9. An install may leave c@1.0.3 for one and c@1.0.10 for the other. After dedupe, a single c@1.0.10 sits at the root and both resolve it through Node's module lookup.
A second case: an older install left a root level c@1.0.3 for b, while d got a nested c@1.9.9 because npm prefers newer versions by default. Dedupe removes the nested copy if the root copy satisfies d's requirement.
What dedupe does and does not do
From the documentation:
- It restructures the existing tree. It works on the whole tree and ignores arguments.
- It will not install new modules.
- It will not change the semver ranges of your direct dependencies. To update those, use npm update with the save option.
- To prefer deduplication during future installs, use the prefer-dedupe option or set it in your config.
npm find-dupes runs the same check as a dry run, so you can review the plan.
A safe routine
- Make sure your working tree is clean and tests pass.
- Run
npm find-dupesand read the output. - Run
npm dedupe. - Review the lockfile diff. Only the tree layout and resolved entries should move.
- Run tests and build, then commit.
Why it matters beyond size
Duplicates are a nuisance for disk and bundle size, but they also affect security work. If two versions of a package exist and one is vulnerable, your scanner will report it, and a fix means finding which parent holds the old copy. Fewer copies make that investigation shorter.
Be realistic about the limits, though. If two parents truly demand incompatible ranges, dedupe cannot merge them. In that case the options are upgrading a parent, replacing it, or using an override, covered in npm overrides.
See it in an inventory
A flat list of every installed package and version is the easiest way to spot duplicates. The interactive demo below shows a dependency inventory view.
Click through it at your own pace, or open it full screen.
Safeguard's SBOM and dependency scanning produces that kind of inventory, and a free scan is available at gold.safeguard.sh/scan.
Quick check
Will npm dedupe upgrade my dependencies?
No. It rearranges the existing tree and does not change your direct dependency ranges. Use npm update for upgrades.
How do I preview changes first?
Run npm find-dupes, which performs the same check as a dry run.
Sources
Last reviewed: 19 October 2026.