依赖管理
依赖管理
peerDependencies
引言
想必前端同学对
npm2 中dependencies 与peerDependencies 区别
假设我们当前的项目是
{
"dependencies": {
"PackageB": "1.0.0"
}
}
如果我们在我们的npm install PackageA
MyProject
|- node_modules
|- PackageA
|- node_modules
|- PackageB
那么在我们的项目中,我们能通过下面语句引入
var packageA = require('PackageA')
但是,如果你想在项目中直接引用
var packageA = require('PackageA')
var packageB = require('PackageB')
这是不行的,即使
所以,为了解决这个问题,在
但是,有时我们不用在当前项目中声明对
为什么在项目中不用声明就可以直接使用呢?这就不得不说说
peerDependencies 的引入
为了解决这种问题:
如果你安装我,那么你最好也安装X,Y和Z.
于是peerDependencies
就被引入了。例如上面
{
"peerDependencies": {
"PackageB": "1.0.0"
}
}
那么,它会告诉
也就是说,如果你npm install PackageA
,你将会得到下面的如下的目录结构:
MyProject
|- node_modules
|- PackageA
|- PackageB
你可能注意到:
在
npm2 中,即使当前项目MyProject 中没有直接依赖PackageB ,该PackageB 包依然会安装到当前项目的node_modules 文件夹中。
下面的代码现在可以正常工作了,因为两个包在
var packageA = require('PackageA')
var packageB = require('PackageB')
总结一句话,peerDependencies
的具体作用:
peerDependencies
的目的是提示宿主环境去安装满足插件peerDependencies 所指定依赖的包,然后在插件import 或者require 所依赖的包的时候,永远都是引用宿主环境统一安装的npm 包,最终解决插件与所依赖包不一致的问题。
举个例子,就拿目前基于
"peerDependencies": {
"react": ">=16.0.0",
"react-dom": ">=16.0.0"
}
它要求宿主环境安装
import * as React from 'react';
import * as ReactDOM from 'react-dom';
组件中引入的
npm2 和npm3 中peerDependencies 的区别
正如上一节谈论的,在peerDependencies
所指定的依赖会随着npm install PackageA
一起被强制安装,所以不需要在宿主环境的peerDependencies
内容的依赖。
但是在peerDependencies
的表现与
npm3 中不会再要求peerDependencies 所指定的依赖包被强制安装,相反npm3 会在安装结束后检查本次安装是否正确,如果不正确会给用户打印警告提示。
就拿上面的例子来说,如果我们
PackageB是一个需要的依赖,但是没有被安装。
这时,你需要手动的在
另外,在
