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

1,519 阅读3分钟

“我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第1篇文章,点击查看活动详情

  • 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 ....

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

个人总结

框架啥的放进去~

其他的情况欢迎评论区留言~

文中措辞、知识点、格式如有疑问或建议,欢迎评论~你对我很重要~
🌊如果有所帮助,欢迎点赞关注,一起进步⛵这对我很重要~