例えば自分は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一応他のバージョンは、
となっています。