📦
package.jsonのpeerDependenciesMetaってなんだ?
TL;TD
-
package.json
に記述するフィールドで、peerDependencies
で定義したバージョンを満たしてなくても警告を出さなくするためのオプションを設定することができる (2020/05/03時点) - パッケージを公開する人以外はあんまり気にしなくても大丈夫そう
peerDependencies
とは
そもそもpeerDependencies
は、あるモジュールX
に対するインタフェースを持っており、モジュールX
から参照されることを想定するが、モジュールX
のどこまでにバージョン互換性を持っているかを表記したものです。
例えば eslint-plugin-vue
は、 eslint
でVueファイルを扱うためのプラグインですが、どのバージョンの eslint
に対して互換性のあるプラグインなのかがpeerDependencies
に記述されています。
"peerDependencies": {
"eslint": "^5.0.0 || ^6.0.0"
}
(引用)
上記の例だと、eslint-plugin-vue
は、eslint
の5系と6系に対応しているということになります。
その互換性をあえて無視して、eslint
は4系を、eslint-plugin-vue
は最新版を指定してインストールしてみます。すると以下のような、互換性がない旨の警告が出ます。
$ yarn add eslint@4.0.0 eslint-plugin-vue
warning " > eslint-plugin-vue@6.2.2" has incorrect peer dependency "eslint@^5.0.0 || ^6.0.0".
peerDependenciesMeta
とは
peerDependenciesMeta
は、 peerDependencies
の設定に関して、追加情報を定義するためのフィールドで、現在(2020/05/03)は、 optional
属性のみ定義可能なようです。
optional
属性はpeerDependencies
の互換性を無視しても良いかをBooleanで設定します。
例えば、もしeslint-plugin-vue
のpackage.json
に、以下のようにpeerDependenciesMeta
が設定されていると、前項の警告は出なくなります。(※ただし使用するパッケージマネージャによる)
"peerDependenciesMeta": {
"eslint": {
"optional": true
}
}
Discussion