peerDependencies是npm一个比较早的概念,以前一直没有注意过因为它主要是跟插件的开发相关,直到最近负责做一些插件开发,才接触到这个东西。
我们对dependencies和devDependencies应该都很熟悉了,但是除了它们两个意外,package.json里还可以配置一个叫peerDependencies的配置。我们在NPM3的安装中有时候会有这样的提示:
1 | npm WARN peerDependencies The peer dependency mocha@>=1.x.x included from grunt-mocha-istanbul will no |
这个警告的意思是grunt-mocha-istanbul插件设置了对mocha@>=1.x.x的peerDependencies,但是npm 3+不再自动安装peerDependencies,应用需要明确的依赖它(添加到 package.json 的 dependencies 等地方)。
这点要说明,在npm1和2的版本中,peerDependencies是会被自动安装的,但是在3的版本中只会有警告。
设置peerDependencies的方法很简单:
1 | { |
npm文档中对peerDependencies的介绍是:
In some cases, you want to express the compatibility of your package with a host tool or library, while not necessarily doing a require of this host. This is usually referred to as a plugin. Notably, your module may be exposing a specific interface, expected and specified by the host documentation.
大概的意思就是:通常是在插件开发的场景下,你的插件需要某些依赖的支持,但是你又没必要去安装,因为插件的宿主会去安装这些依赖,你就可以用peerDependencies去声明一下需要依赖的插件和版本,如果出问题npm就会有警告来提醒使用者去解决版本冲突问题。
参考:
https://docs.npmjs.com/files/package.json#peerdependencies
https://github.com/hongfanqie/peer-dependencies