-
Notifications
You must be signed in to change notification settings - Fork 64
ERESOLVE in force mode #180
Comments
One note: the package.json you have there actually demonstrates two distinct things. In theory, npm should be able to install a valid tree here. Namely, But there's also the case where there isn't a valid resolution, such as: {
"devDependencies": {
"webpack-dev-server": "^3.11.0",
"webpack": "^5.0.0"
}
} This is the case that I intended to point out in npm/cli#2123. Both cases demonstrate the issue with |
Thanks! Yes, both should work with |
Ah, so this is interesting. Two factors at play here. First of all, webpack 5 peer-depends on That would normally be fine, especially in However, in this case, the peerSetSource also itself has a peer dep on Because of this extra second hiccup, we don't go into the more aggressive overriding code path (since we assume we don't have to, since we're just looking for an optimization anyway). A solution here may be to give the first place we look the special treatment, if we have skipped past the Investigating. |
Minor correction: webpack@5 directly- (not peer-) depends on |
Ah, ok. Well, same effect :) There's a thing that's holding webpack@5 in place, but we shouldn't care. Got a fix for it by gathering the dep set when we check for replaceability, but now getting some extraneous metadeps left behind. Should have a fix ready for Friday's npm release, most likely. |
Discovered an interesting issue with the following dependency set: ```json { "devDependencies": { "webpack-dev-server": "^3.11.0", "@pmmmwh/react-refresh-webpack-plugin": "^0.4.3" } } ``` `webpack-dev-server` here has a peerDependency on webpack v4. But, the dependencies of `@pmmmwh/react-refresh-webpack-plugin` have peer dependencies on webpack at `4 || 5`. So, a resolution _should_ be possible. Since the `@pmmmwh/react-refresh-webpack-plugin` package is alphabetically first, it loads its deps, and ends up placing webpack@5 to satisfy the dep with the latest and greatest. Then when `webpack-dev-server` gets to its eventual peer dep on webpack, it can't replace it, because `webpack@5` has a dependency on `terser-webpack-plugin@^5.0.3`, which in turn has a peer dependency on `webpack@5.4.0`. When we check to see if webpack 5 can be replaced, we find it has a dependent, and reject the replacement. But that dependent is only present as a dependency of the thing being replaced, so should not be considered. Second, while the source of the `terser-webpack-plugin` is `webpack`, it cannot be installed there, because it has peer deps that are also peer deps of webpack. So, we _must_ place it in the root node_modules, but were not attempting the "source" location overrides, because the root is not the source. This was a second issue resulting in `ERESOLVE` errors even when `--force` was applied. Fixes: #180 Fixes: npm/cli#2123
Discovered an interesting issue with the following dependency set: ```json { "devDependencies": { "webpack-dev-server": "^3.11.0", "@pmmmwh/react-refresh-webpack-plugin": "^0.4.3" } } ``` `webpack-dev-server` here has a peerDependency on webpack v4. But, the dependencies of `@pmmmwh/react-refresh-webpack-plugin` have peer dependencies on webpack at `4 || 5`. So, a resolution _should_ be possible. Since the `@pmmmwh/react-refresh-webpack-plugin` package is alphabetically first, it loads its deps, and ends up placing webpack@5 to satisfy the dep with the latest and greatest. Then when `webpack-dev-server` gets to its eventual peer dep on webpack, it can't replace it, because `webpack@5` has a dependency on `terser-webpack-plugin@^5.0.3`, which in turn has a peer dependency on `webpack@5.4.0`. When we check to see if webpack 5 can be replaced, we find it has a dependent, and reject the replacement. But that dependent is only present as a dependency of the thing being replaced, so should not be considered. Second, while the source of the `terser-webpack-plugin` is `webpack`, it cannot be installed there, because it has peer deps that are also peer deps of webpack. So, we _must_ place it in the root node_modules, but were not attempting the "source" location overrides, because the root is not the source. This was a second issue resulting in `ERESOLVE` errors even when `--force` was applied, with this dependency set: ```json { "devDependencies": { "webpack-dev-server": "^3.11.0", "webpack": "^5.0.0" } } ``` Fixes: #180 Fixes: npm/cli#2123
Discovered an interesting issue with the following dependency set: ```json { "devDependencies": { "webpack-dev-server": "^3.11.0", "@pmmmwh/react-refresh-webpack-plugin": "^0.4.3" } } ``` `webpack-dev-server` here has a peerDependency on webpack v4. But, the dependencies of `@pmmmwh/react-refresh-webpack-plugin` have peer dependencies on webpack at `4 || 5`. So, a resolution _should_ be possible. Since the `@pmmmwh/react-refresh-webpack-plugin` package is alphabetically first, it loads its deps, and ends up placing webpack@5 to satisfy the dep with the latest and greatest. Then when `webpack-dev-server` gets to its eventual peer dep on webpack, it can't replace it, because `webpack@5` has a dependency on `terser-webpack-plugin@^5.0.3`, which in turn has a peer dependency on `webpack@5.4.0`. When we check to see if webpack 5 can be replaced, we find it has a dependent, and reject the replacement. But that dependent is only present as a dependency of the thing being replaced, so should not be considered. Second, while the source of the `terser-webpack-plugin` is `webpack`, it cannot be installed there, because it has peer deps that are also peer deps of webpack. So, we _must_ place it in the root node_modules, but were not attempting the "source" location overrides, because the root is not the source. This was a second issue resulting in `ERESOLVE` errors even when `--force` was applied, with this dependency set: ```json { "devDependencies": { "webpack-dev-server": "^3.11.0", "webpack": "^5.0.0" } } ``` Fixes: #180 Fixes: npm/cli#2123 PR-URL: https://github.com/pull/182 Credit: @isaacs Close: #182 Reviewed-by: @darcyclarke
This shouldn't happen.
npm/cli#2123
The text was updated successfully, but these errors were encountered: