peerDependencies是npm一个比较早的概念,以前一直没有注意过,因为它主要是跟插件的开发相关,直到最近负责做一些插件开发,才接触到这个东西。

我们对dependenciesdevDependencies应该都很熟悉了,但是除了它们两个以外,package.json里还可以配置一个叫peerDependencies的配置。

那么这个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的作用了

例如上面PackageA的package.json文件如果是下面这样:

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

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

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

MyProject
|- node_modules|- PackageA|- PackageB

因此,你可能注意到:在npm2中,即使当前项目MyProject中没有直接依赖PackageB,该PackageB包依然会安装到当前项目的node_modules文件夹中。

在npm2中,PackageA包中peerDependencies所指定的依赖会随着npm install PackageA一起被强制安装,所以不需要在宿主环境的package.json文件中指定对PackageA中peerDependencies内容的依赖。

但是在npm3中,peerDependencies的表现与npm2不同

npm3中不会再要求peerDependencies所指定的依赖包被强制安装,相反npm3会在安装结束后检查本次安装是否正确,如果不正确会给用户打印警告提示。

就拿上面的例子来说,如果我们npm install PackageA安装PackageA时,你会得到一个警告提示说:

PackageB是一个需要的依赖,但是没有被安装。


这时,你需要手动的在MyProject项目的package.json文件指定PackageB的依赖。

参考链接:peerDependencies介绍及简析
参考链接:PeerDependencies
参考链接:探讨npm依赖管理之peerDependencies

peerDependencies WARNING问题剖析相关推荐

  1. peerDependencies WARNING 警告剖析

    在学 React 过程中,为了方便写 CSS 样式就安装了 sass 和 sass-loader 模块.然后愉快的执行 npm start,结果控制台抛出了警告,这样的警告在之前的 Vue 项目中也偶 ...

  2. peerDependencies WARNING webpack-cli@* requires a peer of webpack@4.x.x || 5.x.x but none was instal

    peerDependencies WARNING webpack-cli@* requires a peer of webpack@4.x.x || 5.x.x but none was instal ...

  3. webpack——快速入门【一】

    学习webpack https://github.com/webproblem/learning-article#webpack https://github.com/lengziyu/learn-w ...

  4. npm创建Vue工程【element UI】

    npm创建Vue工程[element UI] 步骤 # 初始化一个名为 hello-vue 的Vue工程 vue init webpack hello-vue# 进入 hello-vue 工程 cd ...

  5. 详解从零搭建企业级 vue3 + vite2+ ts4 框架全过程

    大厂技术  高级前端  Node进阶 点击上方 程序员成长指北,关注公众号 回复1,加入高级Node交流群 本文不仅仅是搭建个脚手架这么简单,还会带你了解每一步.甚至每一个配置项的作用,和每个配置的知 ...

  6. JavaApp自动化测试系列[v1.0.0][Appium开发环境搭建]

    Appium 是一个开源工具,用于自动化 iOS 手机. Android 手机和 Windows 桌面平台上的原生.移动 Web 和混合应用.「原生应用」指那些用 iOS. Android 或者 Wi ...

  7. vue3 项目中如何输出webpack的config.js

    这个配置文件的获取方法: Microsoft Windows [版本 10.0.16299.1932] (c) 2017 Microsoft Corporation.保留所有权利. C:\Users\ ...

  8. windows系统安装VUE 踩地雷合集(使用webpack-simple)

    首先是下载一个node.js安装包.目前就下最新的吧.(下载最新版本可能要降版本),然后安装cnpm的淘宝镜像.安装之前建议参阅npm的安装机制. 本文档参考自:Jinkey原创Vue2.0 新手完全 ...

  9. Duwamish深入剖析-配置篇

    Duwamish深入剖析-配置篇 摘要: 本文详细介绍了Duwamish网上电子书店的Web.config配置文件的结构处理方式以及用途,阐述了配置文件的各功能模块中的作用. 目录: 引言 配置节处理 ...

最新文章

  1. SAP QM 事务代码QAC2的BUG?
  2. python专科就业难吗-python好就业吗
  3. Java面向对象(二)面向对象的特征 --- 封装 、 继承、 多态
  4. 怎样编写测试类测试分支_编写干净的测试-被认为有害的新内容
  5. LeetCode 413. 等差数列划分(DP)
  6. mysql 插入优化_MySQL批量SQL插入性能优化
  7. 天天打无人车是怎样一种体验?
  8. Linux 内核/sys 文件系统之sysfs 属性文件
  9. “威金(Worm.Viking)”病毒特点-专杀及_desktop.ini删除
  10. c语言编程开发app,C语言编程app
  11. 关于双通道CANFD记录仪的视频介绍
  12. Snipaste——一款强大又实用的截图工具
  13. 未解Bug-邮箱字母莫名变成大写,导致修改密码时密码不一致
  14. MATLAB图中图局部放大几种方法
  15. Terracotta配置文件
  16. OSGi跨bundle调用,jaxb-impl异常
  17. 数字电路学习——三极管的使用
  18. XigmaNas系统(二):蜗牛星际安装Xigmanas(Nas4Free)
  19. python爬虫专家_Python爬虫入门教程 27-100 微医挂号网专家团队数据抓取pyspider-阿里云开发者社区...
  20. 知识点滴 - 无线电频谱划分

热门文章

  1. 跳转指令JMP(04)和跳转结束指令JME(05)
  2. 基于特征提取的迁移学习
  3. rep论文阅读2:ResRep_Lossless CNN Pruning via Decoupling Remembering and Forgetting
  4. Advanced Super-Resolution using Lossless Pooling Convolutional Networks
  5. 宁夏召开外派教师家属新春慰问座谈会
  6. AD软件中的pcbdoc、schdoc等类似一些文件的图标变成了白板解决办法
  7. 使用spring-data-redis实现incr自增
  8. Excel表格中排名函数
  9. 百度语音识别注册流程
  10. CSR867x — sink工程的编译与下载(run)