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. 进程注入后门工具Cymothoa
  2. altium designer PCB把板子翻过来看
  3. 分类算法中常用的评价指标
  4. js 点击侧边栏展示内容_上海SEO优化网站侧边栏一般添加什么内容
  5. HP-UX的终端TERM要设置成什么,才能输入中文呢?
  6. 巨省显存的重计算技巧在TF、Keras中的正确打开方式
  7. 删除目录文件html代码,ASP创建目录、删除目录,删除文件代码范例
  8. 保存blob为本地文件
  9. 对于初学者,如何轻松学习JavaScript?
  10. 大数据分析如何助力企业发展
  11. jupyter 代码到 pycharm 的迁移
  12. CrossOver for Mac 怎么用?
  13. 软件测试类型方法步骤英语,软件测试类英文面试题
  14. VB6 如何添加自定义函数 模块 把代码放到一个模块中
  15. 测试用例设计与黑盒测试用例设计
  16. ##Mysql数据库DQL查询工具的使用
  17. oracle 增量导出 导入,Oracle增量导入导出
  18. 基于Nexus搭建maven私有源仓库
  19. c 语言指针数组长度,c如何获取指针数组的长度?
  20. css3倒数两个,:nth-last-child()

热门文章

  1. WSL2:我在原生的Win10玩转Linux系统
  2. 上线两天用户 10W+,这款 AI 知识图谱小程序有多牛?
  3. 2021 年了,算法岗位应该怎样准备面试?
  4. “飞天、无影、小蛮驴…”带你走进2020云栖大会
  5. 2020 年,你还在使用 Java 中的 SimpleDateFormat 吗?
  6. 50 岁程序员创业说:两个月提交 50 个 PR,三个月内融资 2000 万美元
  7. 中国开启开源新纪元!
  8. 7 个令人兴奋的 JavaScript 新特性
  9. 开幕倒计时3天 | 2019中国大数据技术大会(BDTC)邀您一同共赴大数据+AI盛宴!...
  10. 马云后悔创办阿里:想停根本停不下来;人民日报评“滴滴顺风车争议”;jQuery 曝漏洞|极客头条...