Node.js 应用 peer dependency 的用法

简介: Node.js 应用 peer dependency 的用法

有时候我们可以从 package.json 文件里发现下面这些定义:

{
  //...
  "peerDependencies": {
    "libraryName": "1.x"
  }
}

dependencies 是我们的项目所依赖的包。

devDependencies 是在开发阶段需要的包。 比如说像 Jest 这样的测试框架或像 Babel 或 ESLint 这样的其他实用程序。

在这两种情况下,当我们安装一个包时,npm 会自动安装它的 dependencies 和 devDependencies.

peerDependencies 的工作机制不同。 它们不会自动安装。

当一个依赖项(dependency)在包中列为 peerDependency 时,它不会自动被安装。 相反,包含了这个包的应用代码,必须包含它作为其依赖项。

看一个例子。

项目 a 的 package.json,包含了项目 b:

{
  //...
  "dependencies": {
    "b": "1.x"
  }
}

项目 b 的 package.json:

{
  //...
  "peerDependencies": {
    "c": "1.x"
  }
}

因此,在包 A 中,我们必须添加 c 作为依赖项,否则当您安装包 b 时,npm 会抛出一个警告(并且代码可能会在运行时失败):


a 的 package.json:

{
  //...
  "dependencies": {
    "b": "1.x",
    "c": "1.x"
  }
}

peerDependencies的一个问题:

如果我的包依赖于 request 版本 2 和其他库,但其他库依赖于 request 版本 1,则生成的依赖关系图如下所示:

现在 some-other-library 拥有自己的请求 v1 副本,同时不会干扰应用程序本身 request 包的 v2 副本。

总之,对等依赖项几乎与普通依赖项一样,但不是在 A 和 B 之间定义强需求(即您正在开发的项目及其所依赖的项目),它们旨在指定您的代码所需的包,但不并不是直接 require 它。

想象一下,我们正在开发模块 A,它是模块 B 的插件。这意味着 A 将与 B 一起使用,为此,A 需要遵循一定的结构,并且很可能有一个符合以下标准的公共 API,以被 B 的方法中调用。

//in your code...
B.addPlugin(new A())
//....
B.method() //internally using A's code here.

相关文章
|
5天前
|
JavaScript 前端开发
js变量的作用域、作用域链、数据类型和转换应用案例
【4月更文挑战第27天】JavaScript 中变量有全局和局部作用域,全局变量在所有地方可访问,局部变量只限其定义的代码块。作用域链允许变量在当前块未定义时向上搜索父级作用域。语言支持多种数据类型,如字符串、数字、布尔值,可通过 `typeof` 检查类型。转换数据类型用 `parseInt` 或 `parseFloat`,将字符串转为数值。
11 1
|
21天前
|
JavaScript 前端开发 算法
JavaScript 中的 if 判断:深入理解、实战应用与进阶技巧
【4月更文挑战第7天】探索 JavaScript 中的 if 判断语句,它是构建逻辑清晰程序的基础。了解其概念、语法、应用示例及编程技巧,包括条件控制、else if 结构、三目运算符。注意条件表达式简洁性,避免 falsy 值陷阱,利用逻辑运算符优化,并减少 if 嵌套。实践这些技巧将提升编程能力和代码质量。
22 0
|
23天前
|
JavaScript 前端开发 算法
JavaScript 中算术操作符:全面解读、实战应用与最佳实践
【4月更文挑战第5天】本文探讨JavaScript中的算术操作符,包括加、减、乘、除、求余、自增、自减及复合赋值等,强调理解与熟练运用它们对提升编程效率和代码准确性的重要性。文中通过示例介绍了各种操作符的用法,同时提醒注意数据类型转换、浮点数精度、除以零错误以及利用短路求值优化逻辑等问题。通过学习,读者能更好地掌握算术操作符在不同场景的应用,提升编程技能。
22 1
|
24天前
|
存储 JavaScript 前端开发
Angular 应用 node_modules 子文件夹 @types 的作用介绍
Angular 应用 node_modules 子文件夹 @types 的作用介绍
14 1
|
1天前
|
开发框架 JavaScript 前端开发
【JavaScript 与 TypeScript 技术专栏】TypeScript 在 Web 开发中的前沿应用
【4月更文挑战第30天】TypeScript在Web开发中日益重要,以其强大的类型系统提升代码质量,支持组件化开发,与React、Vue、Angular等框架良好集成。在大型项目管理中,TypeScript助于代码组织和优化,提高团队协作效率。此外,它提升开发体验,提供智能提示和错误检测。众多成功案例证明其前沿应用,未来将在Web开发领域持续发挥关键作用。
|
1天前
|
前端开发 JavaScript 网络协议
【JavaScript技术专栏】WebSockets在JavaScript中的应用
【4月更文挑战第30天】WebSocket是为解决HTTP协议在实时通信上的局限而诞生的技术,提供全双工、持久连接的通信方式,适合在线聊天、实时游戏等场景。JavaScript中的WebSocket API使浏览器与服务器能建立持久连接,通过事件处理连接、发送/接收数据及错误。相较于AJAX轮询和长轮询,WebSockets更高效、实时,是现代Web实时通信的优选。
|
1天前
|
移动开发 JavaScript 前端开发
【JavaScript技术专栏】Web Worker在JavaScript中的应用
【4月更文挑战第30天】HTML5的Web Worker API解决了JavaScript单线程性能瓶颈问题,允许在后台线程运行JS代码。本文介绍了Web Worker的基本概念、类型、用法和应用场景,如复杂计算、图像处理和数据同步。通过实例展示了搜索建议、游戏开发和实时数据分析等应用,并提醒注意其无法直接访问DOM、需消息传递通信以及移动端资源管理。Web Worker为前端开发提供了多线程能力,提升了Web应用性能和用户体验。
|
1天前
|
设计模式 前端开发 JavaScript
【JavaScript 技术专栏】JavaScript 设计模式与实战应用
【4月更文挑战第30天】本文探讨JavaScript设计模式在提升开发效率和代码质量中的关键作用。涵盖单例、工厂、观察者、装饰器和策略模式,并通过实例阐述其在全局状态管理、复杂对象创建、实时数据更新、功能扩展和算法切换的应用。理解并运用这些模式能帮助开发者应对复杂项目,提升前端开发能力。
|
2天前
|
JSON 前端开发 JavaScript
使用JavaScript制作一个简单的天气应用
使用JavaScript制作一个简单的天气应用
|
5天前
|
JavaScript 前端开发
js的let、const、var的区别以及应用案例
【4月更文挑战第27天】ES6 中,`let` 和 `const` 是新增的变量声明关键字,与 `var` 存在显著差异。`let` 允许重新赋值,而 `const` 不可,且两者都具有块级作用域。`var` 拥有函数级作用域,并可在函数内任意位置访问。`let` 和 `const` 声明时必须初始化,而 `var` 不需。根据需求选择使用:局部作用域用 `let`/`const`,全局或函数范围用 `var`,不可变值用 `const`。
14 2