🚢

Cloudflare Workersのデプロイ時に.wasmファイルをimportしている箇所がエラーになる場合の対処法

2024/09/18に公開

結論

wranglerのバージョンを3.15.0以上に上げましょう。

詳細

先日、node_modules以下にあるパッケージの中の.wasmファイルをimportするコードを書きました。
そのファイルを含んだプロジェクトを、GitHub Actionsを使ってCloudflare Workersにデプロイしようとしました。

// こんな感じのimport文
import wasm from "svg2png-wasm/svg2png_wasm_bg.wasm"

すると、次のようなエラーが出てしまいました。

  ✘ [ERROR] ENOENT: no such file or directory, open '/home/runner/work/repo/repo/src/svg2png-wasm/svg2png_wasm_bg.wasm' [plugin wrangler-module-collector]
  
      src/foo.ts:2:17:
        2 │ import wasm from 'svg2png-wasm/svg2png_wasm_bg.wasm'
          ╵                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

調べてみたところ、wranglerの3.15.0から上のようなファイルのimportができるようになっていたようでした。
(それ以前は import wasm from "../node_modules/foo/bar.wasm" のように書く必要があった)

Release wrangler@3.15.0 · cloudflare/workers-sdk

This update now allows you to import the file like so, assuming it's exposed and available in the package's exports field:
import wasm from "svg2png-wasm/svg2png_wasm_bg.wasm";

デプロイに使用されたwranglerのバージョンを確認してみたところ、3.13.2でした。
この記事を書いている時点でのcloudflare/wrangler-actionのデフォルトのバージョンのようです。(参考)

そこで、GitHub Actionsのファイルを編集して新しいwranglerのバージョンを指定してみたところ、デプロイに成功するようになりました。
(バージョンは、ローカルにあったのと同じ3.57.2にしました)

参考になれば幸いです。

Discussion