例えば自分はnode@^10
を使っていて、これを使いたいのに直接的な依存ではないパッケージのpackage.json
のengines
にnode@<10
(10
より小さい)と指定されているが為にyarn
でのインストールが失敗するということが起こる時があります。
このエラーは一応yarn --ignore-engines
と、依存のengines
の指定を無視するオプションを付けると回避できますが、色んなプロジェクトを行き来していたりで「このプロジェクトではこのオプションが必要」などと覚えるのは面倒だったりするのでできれば解決したかったりします。
upath
僕が最近目撃したのはupath@1.0.4
というパッケージ関連の事です。このupath@1.0.4
ではengines
が>=4 <=9
と指定されているようで、既にほかプロジェクトでは10
や11
を使っていたので結構な頻度で引っかかりイライラしていました。
error upath@1.0.4: The engine "node" is incompatible with this module.
Expected version ">=4 <=9". Got "11.13.0"
しかもこれは直接追加したパッケージではなく、あるパッケージの依存パッケージの中で入っているであろうパッケージでいした。
しかし、そのあとにリリースされたこのパッケージのnode
のensines
はnode>=4
へ修正されたので、そちらを使うようにすれば解決できそうです。
resolutions
これをpackage.json
のresolutions
へ設定することで直接的な依存関係は弄らずにupath
だけのバージョンを上げることができます。
現在のupath
の最新バージョンは1.1.2
です。upath@1.1.2
を使うようにするためには以下のようにします。
{
"resolutions": {
"upath": "1.1.2"
}
}
そしてyarn
するだけです。yarn
後yarn.lock
は以下のように更新されていました。
-upath@^1.0.0:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/upath/-/upath-1.0.4.tgz#ee2321ba0a786c50973db043a50b7bcba822361d"
- integrity sha512-d4SJySNBXDaQp+DPrziv3xGS6w3d2Xt69FijJr86zMPBy23JEloMCEOUBBzuN7xCtjLCnmB9tI/z7SBCahHBOw==
+upath@1.1.2, upath@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068"
+ integrity sha512-kXpym8n
一応他のバージョンは、
となっています。