发包之前你一定要了解的Peer Dependencies

本文探讨了在创建和发布JavaScript库时如何选择Dependencies和Peer Dependencies。解释了Dependencies用于确保用户安装必要的依赖,而Peer Dependencies则声明库所兼容的版本。当两个包依赖不同版本的同一包时,npm 5以前会自动安装,但npm 3以后会报错。将依赖放入Peer Dependencies可以避免版本冲突和资源浪费,同时确保库与环境中的其他组件兼容。例如,antd库声明了对react的 Peer Dependency,要求用户环境中已有兼容版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • Dependencies
  • Peer Dependencies

关于 这两者的判断,对于应用开发者可能没啥关系。但是 如果你开发了一个库,要发包,那这个最好小小地区分一下。


先看看把包放进去代表什么意思,会发生什么事情

Dependencies

  • 你要用我的这个包,就必须需要安装这些依赖
  • 如果他不在 node_modules,就会自动安装

Peer Dependencies

  • 我的这个包,兼容这个版本的包

  • 如果他不在 node_modules、或者包版本不对

    • 老版本的 npm 会自动安装,npm3之后就不会了,而是报个错给你看,让你自己选择处理方式

具体点,要添加一个依赖的时候怎么选?

工具包

比如:

  • lodash
  • dayjs
  • react-use

就是放 Dependencies

安装的时候就直接

npm install <package-name> 

在 npm 5 之前还要手动指定 --save

npm install <package-name> --save 

框架

你开发一个 react 组件库,你就要指定 react 特定版本来构建它

就放 Peer Dependencies

这个安装时好像也没有特别的命令,需要你自己手动修改 package.json

"peerDependencies": {"react": "^16.8.6",
} 

可能上面还是不能让你确定你的依赖要放在哪里,我们稍稍了解一下 npm 是怎么处理 版本冲突的

稍稍深入了解一下"原理"

我这直接简单粗暴上结论了:

两包版本不同都在 Dependencies 的话

如果你的包依赖的两个包 a、b

它们两 Dependencies 里面放了 版本不同的 c,版本相同的 d

那么你的 node_modules 下就会有两个版本不同的 c 在对应的 a、b 文件夹下面,d是直接在最外一层

也就是 npm 会添加冲突包的重复私有版本来处理这个版本冲突


重复安装导致的问题

  • 内存,占用内存大了这是肯定的
  • 冲突

内存,没什么好说的,能省则省,省不了勉勉强强忍忍,这辈子也就这样过去了

冲突,问题就大了。

本来就是来解决冲突的,万一还冲突了,咋搞

比如我的包是用 xxx16 构建的,我不想它等下再塞一个 xxx14 或者 xxx18 进来,会发生什么,这很难说啊

  • 旧的 说不定还没有我这个包所需要的某个东西
  • 新的 说不定某个东西已经被废除了

放到 Peer Dependencies

比如 antd package.json 302~304 行

antd 就是 react 构建

"peerDependencies": {
	"react": ">=16.9.0",
	"react-dom": ">=16.9.0"
}, 

如果你环境中已经有 react (版本号>=16.9.0)的,那么他就正常使用,直接用你的,而不是再在自己的包下面安装私有版本。

也就是告诉你,大于这个数,我就兼容你了,不多要求了

当然,还有像 <=之类的

如果环境没 react 直接装 antd,那么他就会报类似这样的错

npm ERR! ... wants .... 

就是说,它需要这样的一个 前提,我要这个、这样的才能跑,但是你没有,你看着办吧

最后

整理了75个JS高频面试题,并给出了答案和解析,基本上可以保证你能应付面试官关于JS的提问。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值