cli icon indicating copy to clipboard operation
cli copied to clipboard

[BUG] npm with workspaces fails to install dependencies using dist tags

Open vividviolet opened this issue 7 months ago • 2 comments

Is there an existing issue for this?

  • [x] I have searched the existing issues

This issue exists in the latest npm version

  • [x] I am using the latest npm

Current Behavior

Running npm install in a workspace with package A using preact@latest and package B using preact@experimental only installs preact@latest.

Expected Behavior

Each package should install its own version of the dependency matching the dist tag.

Steps To Reproduce

In a workspaces based environment, for example:

packages.json

{
  "name": "example",
  "version": "1.0.0",
  "license": "UNLICENSED",
  "workspaces": [
    "packages/*"
  ]
}

packages/a/package.json

{
  "name": "a",
  "version": "1.0.0",
  "license": "UNLICENSED",
  "dependencies": {
    "preact": "experimental"
  }
}

packages/b/package.json

{
  "name": "b",
  "version": "1.0.0",
  "license": "UNLICENSED",
  "dependencies": {
    "preact": "latest"
  }
}
  1. Run npm install
  2. Run npm ls --package-lock-only
  3. Observe that it incorrectly dedupes preact to pull only 10.26.5 from latest
├─┬ [email protected] -> ./packages/a
│ └── [email protected]
└─┬ [email protected] -> ./packages/b
  └── [email protected] deduped
  1. Modify a's dependency to use a version packages/a/package.json
{
  "name": "a",
  "version": "1.0.0",
  "license": "UNLICENSED",
  "dependencies": {
    "preact": "11.0.0-experimental.1"
  }
}
  1. Modify b's dependency to use a version packages/b/package.json
{
  "name": "a",
  "version": "1.0.0",
  "license": "UNLICENSED",
  "dependencies": {
    "preact": "10.26.5"
  }
}
  1. Run npm install
  2. Run npm ls --package-lock-only
  3. Observe that it now has the correct dependencies for both packages
├─┬ [email protected] -> ./packages/a
│ └── [email protected]
└─┬ [email protected] -> ./packages/a
  └── [email protected]

Environment

  • npm: 10.9.2
  • Node.js: v23.7.0
  • OS Name: MacOS Sequoia 15.3.1
  • System Model Name: Macbook Pro

vividviolet avatar Apr 23 '25 22:04 vividviolet

able to reproduce locally.

milaninfy avatar Apr 30 '25 17:04 milaninfy

I encountered the same issue using beta instead of experimental. This approach has not worked since npm v7.x, and I couldn't find any documentation regarding the support or deprecation of this feature. Though it seems similar to running npm install preact@beta or npm install preact@experimental, I'm still uncertain why this functionality was suddenly unsupported.

chestnutchen avatar May 12 '25 09:05 chestnutchen