Cloudflare Workersのデプロイ時に.wasmファイルをimportしている箇所がエラーになる場合の対処法
結論
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