時折 yarn
を使ってると警告が出て具体的にどう対処すればいいか忘れることがあるのでメモ.
今回は依存関係でパッケージ間で共通して使われているパッケージが解決できないときの警告の対処法です.
warning "${MODULE_A}" has unmet peer dependency "${MODULE_B}".
TL;DR
警告なので無視するのも一つの手です.
どうしても警告が気になる場合は依存関係で共通して使われるパッケージを package.json
に追加することで解決はします.
間接的な依存パッケージとしてpackage.json
に含むことになります.
yarn add ${MODULE_B}
# 開発用であればオプションを指定
yarn add -D ${MODULE_B}
警告メッセージの説明
具体的には以下の様な警告が出ます.
warning "@mypkg/mod1 > firebase-admin > @firebase/database@0.4.12" has unmet peer dependency "@firebase/app@0.x".
warning "@mypkg/mod1 > firebase-admin > @firebase/database@0.4.12" has unmet peer dependency "@firebase/app-types@0.x".
warning "@mypkg/mod1 > firebase-admin > @firebase/database > @firebase/database-types@0.4.2" has unmet peer dependency "@firebase/app-types@0.x".
この警告をわかりやすく図解すると以下の様になります.
@mypkg/mod1
┗ firebase-admin
┗ @firebase/database@0.4.12
┣ @firebase/app@0.x (peer)
┣ @firebase/app-types@0.x (peer)
┗ @firebase/database-types@0.4.2
┗ @firebase/app-types@0.x (peer)
(peer)
となっているところは具体的には、 peerDependencies
で指定されているものです.
これらの依存を解決させるために @mypkg/mod1
の package.json
の依存関係に @firebase/app
と @firebase/app-types
を指定することで警告が無くなります.
"peerDependencies": {
"@firebase/app": "0.x",
"@firebase/app-types": "0.x"
}
"peerDependencies": {
"@firebase/app-types": "0.x"
}
無視しても大丈夫
そもそも警告なので対応しなくても良い.
yarn.lock
で間接的なバージョンも固定されるので環境依存も問題ありません.
プロジェクトや人によっては無視してることもある様です.
対処したらしたで間接的な依存パッケージなので、依存していたパッケージ等を削除したりすると何処からも利用されない依存パッケージとしてpackage.json
に残ってしまうのも危惧されます.