Astro 4.0でsharpがmunmap_chunk(): invalid pointerになるのをどうにかする。

2023/12/05にAstro 4.0がリリースされました。リリースサイクルが早すぎて頭がおかしくなる。

このブログに影響のあるBreaking Changesはなかったので、pnpm dlx @astrojs/upgradeでAstro 3からそのまま移行しました。astro buildは問題なかったのですが、astro devで画像のあるページをロードすると、sharpがmunmap_chunk(): invalid pointerエラーを起こしてしまいました。いちいちビルドして結果を確認するのは苦痛なのでどうにかします。

環境

  • Windows 11 Pro 23H2のWSL2上でNode 21.4を動作させています。
  • sharpのバージョンは0.33.0です。
$ npx envinfo --binaries --system --npmPackages=sharp --npmGlobalPackages=sharp

  System:
    OS: Linux 5.15 Ubuntu 22.04.3 LTS 22.04.3 LTS (Jammy Jellyfish)
    CPU: (12) x64 12th Gen Intel(R) Core(TM) i5-12400F
    Memory: 12.96 GB / 15.54 GB
    Container: Yes
    Shell: 3.3.1 - /usr/bin/fish
  Binaries:
    Node: 21.4.0 - /usr/local/bin/node
    Yarn: 1.22.19 - /usr/bin/yarn
    npm: 10.2.4 - /usr/local/bin/npm
    pnpm: 8.7.5 - /usr/bin/pnpm
$ pnpm astro info

Astro                    v4.0.4
Node                     v21.4.0
System                   Linux (x64)
Package Manager          pnpm
Output                   static
Adapter                  none
Integrations             build-ogimages
                         algolia-queries
                         @astrojs/react
                         @astrojs/sitemap
                         @astrojs/tailwind
                         auto-import
                         @astrojs/mdx

発生した事象

pnpm astro devで画像のあるページをロードするとmunmap_chunk(): invalid pointerが発生しました。

  vite:load 4.06ms [fs] /src/layouts/Default.astro +3ms
  vite:cache [memory] /node_modules/.pnpm/astro@4.0.4_sass@1.69.5_typescript@5.3.3/node_modules/astro/dist/runtime/compiler/index.js +8ms
  vite:cache [memory] /src/lib/utils/textConverter.ts +0ms
  vite:import-analysis 0.55ms [2 imports rewritten] src/layouts/Default.astro +7ms
  vite:transform 4.39ms /src/layouts/Default.astro +7ms
# 画像が描画できずにastroが停止した
munmap_chunk(): invalid pointer
Aborted
 ELIFECYCLE  Command failed with exit code 134.

解決した方法

以下のissueが自分の状況に近かったのですが、自分の場合はsharp 0.33.0単体では動作するものの、Viteと組み合わせるとだめ、かつ0.32.6に戻しても動かないという状態でした。

もう少し調べてみると、Netlifyのサポートフォーラムに、おそらく同じ事象と思われる投稿がありました。

Problem was an outdated vite-imagetools dependenency which was causing two versions of the sharp library to be loaded into the process.

vite-imagetoolsはインストールされていない(はず)なのでちょっと納得が行きませんが、Astro 4ではViteのバージョンが5に上がってるのと、devだけでエラーが出ているので恐らくこれが正解な気がします。

package.jsonを次のように修正しました

  "pnpm": {
    "overrides": {
      "sharp": "^0.33.0"
    }
  }

pnpm install後にpnpm astro devで画像のあるページをロードしてみたところ、無事画像が描画されました。

  vite:load 2.63ms [fs] /src/layouts/Default.astro +2ms
  vite:cache [memory] /node_modules/.pnpm/astro@4.0.4_sass@1.69.5_typescript@5.3.3/node_modules/astro/dist/runtime/compiler/index.js +7ms
  vite:cache [memory] /src/lib/utils/textConverter.ts +1ms
  vite:import-analysis 0.63ms [2 imports rewritten] src/layouts/Default.astro +8ms
  vite:transform 5.41ms /src/layouts/Default.astro +7ms
# 無事画像が描画された
22:24:31 [200] /_image 18ms
  vite:time 38.31ms /_image?href=%2F%40fs%2Fhome%2Fsakuramochi%2Fastro-blog%2Fsrc%2Fcontent%2Fposts%2F_images%2F2020%2F09%2Fimage-1599299615671.png%3ForigWidth%3D507%26origHeight%3D164%26origFormat%3Dpng&f=webp +98ms
22:24:31 [200] /_image 22ms
  vite:time 43.57ms /_image?href=%2F%40fs%2Fhome%2Fsakuramochi%2Fastro-blog%2Fsrc%2Fcontent%2Fposts%2F_images%2F2020%2F09%2Fimage-1599299475511.png%3ForigWidth%3D514%26origHeight%3D282%26origFormat%3Dpng&f=webp +4ms

2日くらいずっと調べていたのですが情報が全く出てこなかったので、WSL特有の事象なのかもしれません。なんにしても解決してよかったです。ありがとうNetlifyのフォーラムに投稿してくれた人…。

2023/12/20 追記

依存関係を調べたのですが、astroのoptionalDependenciesとpackage.jsonで異なるバージョンが混在していました。開発側も問題を認識しているようで、PRが上がっています。

近いうちに解消しそうですね。良かったです。