
結論から
sharp v0.33.0からyarn v1のサポートが切られました。詳しくは以下のissueをご覧ください。
このサポート範囲は、package.jsonのengines
の値で制御されています。
そのため、package.jsonに記述されているengines
フィールドを無視してインストールすれば、yarn v1でもsharp v0.33.0以降を利用できます。
### 単体でインストールする場合
$ yarn add sharp --ignore-engines
### 全体installする時
$ yarn install --ignore-engines
※ 上記コマンドの実行は自己責任でお願いします。
※ engines
フィールドを無視することは大きなリスクを伴います。上記コマンドはsharp以外のインストールにも影響を及ぼします。意図しない動作やバグを引いても、ライブラリ制作者のサポートには期待できませんので注意してください。

sharpは環境依存なライブラリだから
sharpは実行環境(OSやCPUアーキテクチャ)に応じて最適化されている環境依存なライブラリです。 そのため、実行環境に応じたsharp(prebuilt binary)を適切にインストールする必要があります。
基本的には、yarn add sharp
やyarn install
の実行時に、自動的に環境を判別して適切なprebuilt binary(@img/sharp-linux-x64
など)をインストールしてくれます。しかし、sharp v0.33.0以降においてyarn v1を使用している場合、yarn install
を実行するだけではprebuilt binaryをインストールしてくれません。
調べてみると、sharp自体のpackage.jsonでは、engines.yarn
が記載されていないのですが、prebuilt binaryのpackage.jsonでは、engines.yarn
のバージョン範囲が指定されているようでした。
すなわち、sharp v0.33.0以降においてyarn v1を使用している場合にyarn install
を実行すると
「prebuilt binaryを使用するためのインタフェース(sharp
)はインストールされるものの、engines.yarn
のバージョン範囲に適合しないためprebuilt binary(@img/sharp-linux-x64
など)はインストールされない」ため、実際には動作しないsharpが爆誕することになります。
それでもyarn v1でsharpを使いたい
sharp v0.33.0以降においてyarn v1を使用している場合に
yarn install
を実行すると、実際には動作しないsharpが爆誕する
これを回避するためには、sharpのprebuilt binaryのpackage.jsonで指定されているengines.yarn
を無視するのが一番簡単です。そのため、yarn install --ignore-engines
で動くようになります。
ですが、冒頭にも述べたようにengines
フィールドを無視することは大きなリスクを伴います。
そのため、できればyarn v3以降を利用できないか検討してみてください。
おわりに
sharpは、かの有名なNext.jsや、弊ブログでも使用しているGatsby.jsでも内部的に使用されています。 画像のリサイズ、容量削減、WebPへのフォーマット変換など、いわゆる画像最適化を担う重要なライブラリです。
そのため、意識的にsharpを利用していなくても、メジャーなフレームワークが内部的に使用するsharpがv0.33.0以上に更新された場合は、yarn v1の利用を見直す必要があります。
今後のsharpやメジャーなフレームワークの動向には注意していきたいですね