[BUG] peerDependencies of package behave like dependencies when package is locally installed
Nobody has claimed this yet.
- Dominant language
- JavaScript
- Stars
- 10.1k
- Forks
- 4.7k
- Avg merge
- 2d 2h
- Merged PRs (30d)
- 19
Description
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
You can find a lot of context for this question here: https://stackoverflow.com/questions/77829498/can-i-use-peer-dependencies-in-my-library-when-my-library-is-depended-on-with-a
This visual guide may help:
In summary, lib-package's peer dependency's of behave like regular dependencies when app-package depends on lib-package with a file://... URL.
- Here is a link to a branch that behaves as described above: https://github.com/DanKaplanSES/jsdom-sandbox/tree/lib-has-peer-dependency-and-lib-is-file-dependency-so
- app-package depends on lib-package via a
file://URL. cd app-package; npm run execthrows an error indicating that it is using**lib**-package\node_modules\jsdom\lib\api.js. It should be using**app**-package\node_modules\jsdom\lib\api.jsinstead, because jsdom is a peerDependency of lib-package.
- app-package depends on lib-package via a
- Here is a link to a branch that behaves as expected: https://github.com/DanKaplanSES/jsdom-sandbox/tree/lib-has-peer-dependency-and-lib-is-file-dependency-works-so
- app-package depends on lib-package via
"dankaplanses-lib-package": "^0.0.1",instead offile://. cd app-package; npm run execruns without throwing an error.- If
app-package\node_modules\jsdom\lib\api.jsis modified to add a log statement, you can confirm that app-package is using this file.
- app-package depends on lib-package via
Expected Behavior
I believe peerDependency's should behave the same way regardless of how lib is depended on.
When using a local file URL, I see an error because (I believe) lib-package is using a different jsdom dependency than app-package. When using lib-package as an npmjs.com dependency, lib-package does not have its own jsdom dependency to use. I believe the latter is correct behavior.
Steps To Reproduce
- git clone https://github.com/DanKaplanSES/jsdom-sandbox/tree/lib-has-peer-dependency-and-lib-is-file-dependency-so
- Follow the readme OR cd into each subproject and
npm install cd app-package; npm run exec
Environment
; "builtin" config from C:\Users\user\AppData\Roaming\npm\node_modules\npm\npmrc
prefix = "C:\\Users\\user\\AppData\\Roaming\\npm"
; "user" config from C:\cygwin64\home\user\.npmrc
//registry.npmjs.org/:_authToken = (protected)
registry = "https://registry.npmjs.org/"
script-shell = "C:\\cygwin64\\bin\\bash.exe"
; node bin location = C:\Program Files\nodejs\node.exe
; node version = v20.10.0
; npm local prefix = C:\my-projects\jsdom-sandbox\lib-package
; npm version = 10.3.0
; cwd = C:\my-projects\jsdom-sandbox\lib-package
; HOME = C:\cygwin64\home\user
; Run `npm config ls -l` to show all defaults.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the linked jsdom-sandbox reproduction branch and its README, then run npm install in the app-package and lib-package directories and npm run exec from app-package. Compare the file dependency case with the registry dependency case and trace npm's peer dependency resolution. Done means local file dependencies resolve peer dependencies consistently with registry dependencies.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript, node.js
- Domain
- cli, tooling
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100