Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error: Does Not Satisfy Its Siblings' peerDependencies Requirements #33

Open
youngwind opened this issue Mar 1, 2016 · 0 comments
Open
Labels

Comments

@youngwind
Copy link
Owner

起因

我在装npm的时候不时会碰到这个错误:

Error: Does Not Satisfy Its Siblings' peerDependencies Requirements 

解决方案

通过npm update更新那个报错的包。注意:更新报错的包,而不是正在安装的包。

探索

问题解决之后,我深究了一下原因,发现peerDependencies这个字段的意义。

1. npm如何解决包的依赖?

先考虑一般的情况:module A 依赖于 moduleB 1.0版本,module C依赖于moduleB 2.0版本,那么这个没有问题,因为moduleB是属于dependence字段或者devdependence字段,moduleB会被安装在module A和module C的内部,各自使用不同的版本也不会冲突。
但是,我们考虑插件机制,比如gulp。gulp是一个构建工具,有许多围绕gulp开发的插件,开发者在开发此类插件的时候一般是不会把gulp本身包含在正在开发的包里面的。我们使用者之所以能够正常使用这些插件包,那是因为我们提前安装好了gulp包。也就是说,gulp插件包依赖于包以外的gulp包,这个时候,你就可以把gulp写在gulp插件包的peerdependence字段,**peerdependence里面的包安装路径与当前包同级。**当然,你也可以不这么做,直接显式地安装gulp也是可以的。

2. 那么问题来了

考虑在全局安装的条件下,module A的peerdependence是 module B 1.0版本,你以前已经安装过module A了,所以会默认安装module B 1.0版本(跟module A)同级。现在,你要安装module C,里面的peerdependence是module B 2.0版本,这是可能的,比如不同插件开发的时候依赖的版本很可能不一样。那么,就会造成版本冲突,因为module2.0跟原先已经安装的module1.0版本冲突了,而且是同一个位置,npm就会报上面的错误。

3. 为什么解决办法是更新或者重装?

为什么更新或者重装module B就可以解决问题。我们设想,module A插件先写,那时候的module B版本还很低,所以module A在peerdependence里面写上,需要不低于1.0版本的module B。过了一段时间,module B升级到2.0了,module C开发的时候是基于2.0的,所以它在自己的peerdependence里面写上,需要不低于2.0版本的module B。但是,此时你电脑里面的module B还是1.0版本。所以只需要更新module B到最新版本2.0,那么就可以同时满足module A和module C的需要了。

更新:

注意,从npm 3.0版开始,peerDependencies不再会默认安装了。

参考资料:

  1. https://futurestud.io/blog/how-to-fix-npm-package-does-not-satisfy-its-siblings-peerdependencies-requirements
  2. http://stackoverflow.com/questions/18875674/whats-the-difference-between-dependencies-devdependencies-and-peerdependencies
  3. http://luckydrq.com/2014-10-23/peer-dependencies/
  4. http://javascript.ruanyifeng.com/nodejs/packagejson.html#toc2
@youngwind youngwind changed the title error: Does Not Satisfy Its Siblings' peerDependencies Requirements Error: Does Not Satisfy Its Siblings' peerDependencies Requirements Mar 5, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant