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

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

假设我们有两个 npm module A 和 B,A 是 B 的 plugin.


如果 ABAP 的 package.json 里将 B 定义成其 dependency:

{
  "dependencies": {
     "B": "1.2.0"
  }
}

那么我们在 host 应用里安装 A 后,层级结果如下:

node_modules
|_ A
  |_ node_modules
    |_ B



假设我们又安装了两个 module C 和 D,则 node_modules 文件夹变为如下结构:

node_modules
|_ A
|  |_ node_modules
|      |_ B
|_C
|  |_ node_modules
|      |_ B
|_D
   |_ node_modules
       |_ B

如果安装的 B 版本都是相同的,这将起作用,但是,如果不是,我们就会遇到潜在的问题。 当然我们还忽略了这样一个事实,即实际上,我们将模块 B 复制了三次,这是毫无意义的。

这里的重点是,如果开发人员将 B 声明为 A、C 和 D 的 peer dependency 依赖项,则我们选择的包管理器会做两件事之一。它要么只是忽略这种依赖关系(就像 Yarn 默认情况下所做的那样),让开发人员来自行作出抉择。

要么像 NPM 一样:

检查 B 是否已经安装


如果是,结束当前的检测,进行下一个包的处理


则忽略它


如果不是,包管理器会试图将 B 正确安装在根级别(即在 project/node_module 中)。如果安装失败,会中止并显示对应的错误消息


不能成功安装对等依赖项的原因之一,是存在冲突的版本。 举个例子,A 依赖于 B 的 2.0.0 版本,C 依赖于 B 的7.1.3 版本。 如果 B 正确使用 semver(语义化版本),则两个版本之间会有很多重大更改,因此 A 可能无法与 C 所需的版本一起使用,反之亦然。 这种情况下,需要开发人员自行作出抉择。

当我们在开发将被其他 consume 重用的代码(例如 plugin 和 package)时,对等依赖项会真正发挥作用。 如果只是开发最终产品级的应用,则无需考虑 Peer Dependency.

相关文章
|
5月前
|
JavaScript
npm install没问题,但npm run dev的时候报Node Sass version 6.0.1 is incompatible with ^4.0.0 ^5.0.0
npm install没问题,但npm run dev的时候报Node Sass version 6.0.1 is incompatible with ^4.0.0 ^5.0.0
50 0
|
4月前
|
前端开发
windows10 安装node npm 等前端环境 并配置国内源
windows10 安装node npm 等前端环境 并配置国内源
244 3
|
5月前
|
资源调度 JavaScript Linux
nvm, node.js, npm, yarn 安装配置
nvm, node.js, npm, yarn 安装配置
247 1
2071 verbose node v16.6.0 2072 verbose npm v7.19.1或者 no such file or directory, lstat ‘D:\wor
该博客文章提供了解决在使用npm版本7.19.1时出现的"no such file or directory"错误的具体方法,建议通过降级npm到6.14.8版本来解决问题,并确认了该方法可以成功安装node_modules。
2071 verbose node v16.6.0 2072 verbose npm v7.19.1或者 no such file or directory, lstat ‘D:\wor
|
2月前
|
缓存 JavaScript 前端开发
成功解决:npm 版本不支持node.js。【 npm v9.1.2 does not support Node.js v16.6.0.】
这篇文章介绍了如何解决npm版本与Node.js版本不兼容的问题,提供了查看当前npm和Node.js版本的步骤,以及如何根据Node.js版本选择合适的npm版本并进行升级的详细指导。
成功解决:npm 版本不支持node.js。【 npm v9.1.2 does not support Node.js v16.6.0.】
|
2月前
|
JavaScript
【Deepin 20系统】Jupyter notebook解决ValueError: Please install Node.js and npm before continuing installa
文章讨论了在Deepin 20系统上安装Jupyter Notebook的debug插件时出现的"ValueError: Please install Node.js and npm before continuing installation"错误,并提供了使用conda安装Node.js的解决方法。
83 1
|
2月前
Mac卸载 Node npm,升级 Node
Mac卸载 Node npm,升级 Node
53 0
|
2月前
NPM——Electron failed to install correctly, please delete node_modules/electron and try
NPM——Electron failed to install correctly, please delete node_modules/electron and try
134 0
|
2月前
|
开发工具 git
IDEA——npm install 没有生成node_modules目录
IDEA——npm install 没有生成node_modules目录
136 0
|
2月前
|
缓存
Node——npm ERR! cb() never called!
Node——npm ERR! cb() never called!
45 0

推荐镜像

更多
下一篇
无影云桌面