当前位置: 首页 > Web前端 > HTML

通过一个具体的例子理解npm的peerDependency

时间:2023-03-28 15:29:48 HTML

假设我们有两个npm模块A和B,A是B的插件,如果在ABAP的package.json中定义了B作为它的依赖:{"dependencies":{"B":"1.2.0"}}那么我们在宿主应用中安装A之后,分层结果如下:node_modules|_A|_node_modules|_B假设我们安装了两个模块C和D,那么node_modules文件夹变成如下结构:node_modules|_A||_节点模块||_B|_C||_节点模块|但是,如果没有,我们就有一个潜在的问题。当然,我们也忽略了这样一个事实,即实际上我们将模块B复制了三次,这是毫无意义的。这里的要点是,如果开发人员将B声明为A、C和D的对等依赖项,我们选择的包管理器会执行以下两项操作之一。要么它只是忽略这种依赖性(就像Yarn默认情况下那样)并让开发人员做出自己的决定。要么像NPM:检查B是否已经安装,如果是,结束当前检查,继续下一个包过程,如果没有忽略它,包管理器将尝试在根级别(即在项目/节点模块中)正确安装B。如果安装失败,它会中止并显示相应的错误消息。对等依赖安装不成功的原因之一是存在版本冲突。比如A依赖B的2.0.0版本,C依赖B的7.1.3版本。如果B正确使用semver(语义版本控制),两个版本之间会有很多breakingchanges,那么A可能不适用于C要求的版本,反之亦然。在这种情况下,开发者需要做出自己的选择。当我们开发将被其他消费者重用的代码(例如插件和包)时,对等依赖性真正发挥作用。如果您只是开发最终产品级的应用程序,则无需考虑PeerDependency。