結論から
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 - High performance Node.js image processinghttps://sharp.pixelplumbing.com/
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やメジャーなフレームワークの動向には注意していきたいですね