npm中dependencies与peerDependencies区别

假设我们当前的项目是MyProject,项目中有一些依赖,比方其中有一个依赖包PackageA,该包的package.json文件指定了对PackageB的依赖:

{"dependencies": {"PackageB": "1.0.0"}
}

如果我们在我们的MyProject项目中执行npm install PackageA, 我们会发现我们项目的目录结构会是如下形式:

MyProject
|- node_modules|- PackageA|- node_modules|- PackageB

那么在我们的项目中,我们能通过下面语句引入"PackageA":

var packageA = require('PackageA')

但是,如果你想在项目中直接引用PackageB:

var packageA = require('PackageA')
var packageB = require('PackageB')

这是不行的,即使PackageB被安装过;因为Node只会在“MyProject/node_modules”目录下查找PackageB,它不会在进入PackageA模块下的node_modules下查找。

所以,为了解决这个问题,在MyProject项目package.json中我们必须直接声明对PackageB的依赖并安装。

但是,有时我们不用在当前项目中声明对PackageB的依赖就可以直接引用,为什么在项目中不用声明就可以直接使用呢?这就不得不说说peerDependencies的作用了。

于是peerDependencies就被引入了。例如上面PackageA的package.json文件如果是下面这样:

{"peerDependencies": {"PackageB": "1.0.0"}
}

那么,它会告诉npm:如果某个package把我列为依赖的话,那么那个package也必需应该有对PackageB的依赖。

也就是说,如果你 npm install PackageA,你将会得到下面的如下的目录结构:

MyProject
|- node_modules|- PackageA|- PackageB

总结一句话,peerDependencies的具体作用:

peerDependencies的目的是提示宿主环境去安装满足插件peerDependencies所指定依赖的包,然后在插件import或者require所依赖的包的时候,永远都是引用宿主环境统一安装的npm包,最终解决插件与所依赖包不一致的问题。

npm依赖管理peerDependencies相关推荐

  1. install npm 到某个文件下执行_你可能不知道的 npm 依赖管理那些事

    点击上方蓝字关注我们 npm 是 Node.js 默认的.以 JavaScript 编写的包管理工具,如今,它已经成为世界上最大的包管理工具,是每个前端开发者必备的工具.不知你是否遇到过下面问题: 哎 ...

  2. npm依赖管理java_探讨npm依赖管理之peerDependencies

    引言 想必前端同学对npm的devDependencies和dependencies都比较熟悉,但是对peerDependencies可能就有点陌生,尤其是没有写过npm包插件的同学,比如之前使用gr ...

  3. nodejs Yarn替代npm的包管理——快速、安全、可靠性高的依赖管理

    Yarn能帮你解决的五件事 转自: http://www.qingpingshan.com/jb/javascript/185590.html 长话短说(TL;DR):在 JavaScript 领域有 ...

  4. npm升级依赖包_Taro跨端开发之依赖管理

    昨天跑的好好项目,今天跑不起来 我们在开发周期比较长的前端项目的时候,必然会遇到依赖管理的问题. 我们在开发项目的时候,我们用了大量的三方库.这些三方的依赖库时不时的会更新自己的代码. 第三方依赖库的 ...

  5. 如何使用NPM来管理你的Node.js依赖

    作者 马士华 发布于 2011年12月7日 | 4 讨论 npm 是 Node.js 的模块依赖管理工具.作为开发者使用的工具,主要解决开发 Node.js 时会遇到的问题.如同 RubyGems 对 ...

  6. 用CocoaPods做iOS程序的依赖管理

    CocoaPods 简介 每种语言发展到一个阶段,就会出现相应的依赖管理工具,例如 Java 语言的 Maven,nodejs 的 npm.随着 iOS 开发者的增多,业界也出现了为 iOS 程序提供 ...

  7. Composer PHP依赖管理

    对于现代语言而言,包管理器基本上是标配.Java有Maven,Python有pip,Ruby有gem,Nodejs有npm.PHP的则是PEAR,不过PEAR坑不少: 依赖处理容易出问题 配置非常复杂 ...

  8. es6 依赖循环_探索 JavaScript 中的依赖管理及循环依赖

    我们通常会把项目中使用的第三方依赖写在 package.json 文件里,然后使用 npm .cnpm 或者 yarn 这些流行的依赖管理工具来帮我们管理这些依赖.但是它们是如何管理这些依赖的.它们之 ...

  9. 90.bower解决js的依赖管理

    转自:https://blog.csdn.net/u011537073/article/details/52951122 前言 一个新的web项目开始,我们总是很自然地去下载需要用到的js类库文件,比 ...

最新文章

  1. 化学博士6次投毒同事,只因对方给自己安排工作太多....
  2. 双系统装完只能u盘启动_苹果电脑安装双系统,切换MacOx系统和Windows系统!
  3. Bzoj4016/洛谷P2993 [FJOI2014] 最短路径树问题(最短路径问题+长链剖分/点分治)
  4. SpringMVC学习(六)——Spring四种方式整合MyBatis
  5. zTree使用技巧与详解
  6. MySQL怎么存base64编码_MySQL中如何将字符串转为base64编码?
  7. c++基础(part1)--cpp简介
  8. php 登陆信息 传递,PHP传递POST信息
  9. cocos html5 一直在加载失败,项目进行中的小问题-0426-【Cocos2d-html5】初识Cocos2d-html5-一些移动端浏览器的兼容性Bug_169IT.COM...
  10. html表单验证用正则表达式,JavaScript 使用正则表达式进行表单验证的示例代码
  11. 常用的Opencv函数汇总(持续更新...)
  12. 说人话很难。。。。。。
  13. scipy —— 丰富的子包(io、cluster)
  14. css 怎么设置盒子水平居中,用一段css实现盒子垂直水平居中方法(8种)-案例
  15. win7_32下编译FFmpeg
  16. 易筋SpringBoot 2.1 | 第廿四篇:SpringBoot访问Docker中的MongoDB
  17. 微信小程序 弹出确定取消框
  18. 俺的web课设大作业
  19. QT for Android 修改图标与名称
  20. 好玩的读心术猜数字游戏

热门文章

  1. 小霸王被申请破产重整;虎牙员工自曝被HR抬出公司;Office 2010被微软终止服务|极客头条
  2. 图解 | 看完这篇还不懂高并发中的线程与线程池,你来打我!
  3. 两万字长文读懂 Java 集合!
  4. Java 稳步成长、Kotlin 崛起、Go 保持独特风格,2020 年各大编程语言发展趋势一览...
  5. 巨杉数据库 v5.0 Beta 正式发布!
  6. 一文足以了解什么是 Java 中的锁
  7. 贯穿 C++ 11 与 C++ 17 的 Lambda 到底是个什么?
  8. 当 Python 中混进一只薛定谔的猫……
  9. 代码只要写得多,就能成为顶尖的架构师?
  10. 重磅发布 | 蚂蚁金服与电子标准院达成战略合作 共同推进数据安全行业的标准化...