なんか書いていこうぜー .com

Let's write something good

gatsby-plugin-sharp と gatsby-plugin-manifest のアップデートでつまずいた

2020-03-21
  • Share on Facebook
  • Tweet
  • Add to Pocket

gatsby-plugin-sharp と gatsby-plugin-manifest のアップデートの際にエラーが発生したが、なんとか解消できたので emoji-memo として残しておく。

発生した問題

gatsby-plugin-sharp のアップデートPR( Bump gatsby-plugin-manifest from 2.2.47 to 2.3.1 ) と、gatsby-plugin-manifest のアップデート PR (Bump gatsby-plugin-sharp from 2.4.11 to 2.5.1) で以下のようなエラーが出た。

error "gatsby-plugin-manifest" threw an error while running the onPostBootstrap lifecycle:

Input file contains unsupported image format


  Error: Input file contains unsupported image format

not finished onPostBootstrap - 0.014s

エラーの issue を追いかけた

エラーメッセージでググると、https://github.com/gatsbyjs/gatsby/issues/22303 にあたった。その中のコメントで、libvips/libvips#1539 のリンクに言及されていたのでそちらを確認した。

その中で、lovell/sharp#2062 のリンクに言及しており、コメント で breaking change があったことがわかる。v0.24.0 以上の sharp が必要とな?

taniarascia/taniarascia.com#103 からこの issue が参照されていて、その中のコメント に解決策が提示されていた。

この解決策のコメントの中にあった、resolutions の設定を package.json に追記したところ、エラーが解消され、ビルドがうまくいくようになった。emoji-tada

package.json の resolutions について

pacakge.json の resolutions を使ったことがなかったのでぐぐってみたら、 https://classic.yarnpkg.com/ja/docs/selective-version-resolutions/ がわかりやすかった。

依存パッケージのバージョンを横から指定できるのか。依存パッケージの一部に脆弱性が見つかったりした場合に、これを使って強引にパッチのあたったバージョンにアップデートさせる、というような使い方できるっぽい。これは勉強になった emoji-memo

結論

今回は package.json の resolutions に sharpt のバージョンを "^0.24.1" として指定することでエラーを回避した。 resolutions については、https://classic.yarnpkg.com/ja/docs/selective-version-resolutions/ を参照のこと。