- 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的提问。
有需要的小伙伴,可以点击下方卡片领取,无偿分享