dependencies
如果一个依赖是src
源码中会使用的,那么它可能放到2个地方dependencies
,或者devDependencies
+ peerDependencies
。
- 在业务开发中需要在
src
源码中使用的放在dependencies
中 - 在
npm
包开发中,根据实际情况考虑是放在dependencies
、还是devDependencies
+peerDependencies
组合。
devDependencies
devDependencies的使用场景:
-
仅作为开发时使用,
src
不会用到,那么就应该放在devDependencies
; -
devDependencies
+peerDependencies
组合;在开发
npm
包时,要基于某个包A
做开发,或者使用该npm
包的项目一定会包含A
时,就可以放在devDependencies
+peerDependencies
。例如:我们要基于
react
开发一个npm
包,那react
就应该放在peerDependencies
,而不是dependencies
,因为主体项目一定会安装react
;同时由于在npm
包开发过程中,安装依赖时不会自动安装peerDependencies
中的依赖,所以还需要将react
添加到devDependencies
中作为开发调试使用。{ "devDependencies": { "react": "^18.2.0" }, "peerDependencies": { "react": ">=16.8" }, }
peerDependencies
peerDependencies
是用来告诉宿主环境哪些包也需要安装,项目才能正常运行。
例如npm
包中peerDependencies
中的react >= 16.8.0
。
项目会出现下面几种情况:
- 项目中没有安装
react
,使用npm install
安装npm
包时会自动安装react
; - 项目中安装了
react
且版本符合要求,就以项目中的为准。 - 项目中的
react
版本不符合要求,比如项目中16.0.0
,使用npm
安装会直接报错;
dependencies 与 peerDependencies 的比较
开发npm
包时,依赖到底是放在dependencies还是peerDependencies,可以根据实际情况来定;
- 如果不需要使用者关心依赖,或者依赖的版本不能随便变化,那么直接放在dependencies即可;
- 在开发npm插件时,比如使用
antd
做二次开发、react
组件库等,其中antd
和react
都和宿主项目有直接的关系,不应存在多版本,使用peerDependencies
规定依赖版本的范围即可,同时在devDependencies
中添加开发使用的版本即可。