peerDependencies
そのpackageが依存しているが、そのpackageのユーザが手動でinstallする必要があるもの
Packageには、Host toolとPluginという関係性のあるものがある
e.g.
HostがESlintで、Pluginがeslint-plugin-xxx
HostがReactで、Pluginがreactの関連package
Plugin単体で使うことはなく、
Pluginを使うならHostも当然必要、という関係
peerDepencenciesは、Plugin側が「Hostは自分で入れといてね」という感じで書かれることが多い
Plugin側にpeerDependencies: {Host: x.x.x}と書いているイメージ
Hostが重複して入って競合するのを避ける
packageを使う側の視点
package AのpeerDependenciesに、Bと書いてあるとする
Aを利用したいユーザは、AだけでなくBもinstallする必要がある
Host/Pluginという関係でないのに書かれるとだいぶ鬱陶しい
一時期、react-native-reanimatedでは特定のbabelのpluginを入れる必要があった ref このpackageがbabel pluginのPluginな訳が無い
後からプロジェクトを見た人からすると、
package.jsonに@babel/plugin-xxxと書かれているけどどこにも使われない??という感じにある
plugin側で指定する
code:plugin-10.0.0のpakage.json
"peerDependencies": {
"hosttool": "^1.0.0 || ^2.0.0"
}
このplugin-10.0.0は、hosttoolのv1系とv2系に対応している
ということを表す
上のように指定した時に、plugin v10とhosttool v3を一緒にinstallしようとするとwarningになる
errorじゃないんだmrsekut.icon
host toolが最新になっていて、pluginがそれに追随していないと
例えば、host toolの最新がv18だが、
plugin側ではpeerDependenciesにv16とv17しか書いてない場合
など