本文へスキップ
MameTechNews
フロントエンド

Cloudflare Workers、Node.jsに寄せた新モジュールレジストリを公開

## POINTS

  • new_module_registryは互換日だけでは有効にならず、wrangler設定で明示的に付ける必要がある
  • クエリ付き指定子は別モジュール扱いになるため、同じファイルでも状態が共有されない
  • 圧縮バンドル上限の撤廃とNode安定APIの既定化で、大きなNodeアプリをWorkersへ載せやすくなった

Cloudflareは9月9日、Workersの中核ランタイムworkerdのモジュールレジストリを再実装したと発表した。サーバーレス用途で使う安定版のNode.js APIはすでに既定で有効になり、全プランで64MiBまでデプロイできるよう圧縮バンドルサイズの上限も外した。API互換だけでは足りず、解決・読み込み・キャッシュの挙動をNode.jsに寄せることが今回の主眼だ。

互換フラグnew_module_registryを有効にすると、import.meta.url、import.meta.main、import.meta.resolve()が使える。指定子は実URLとして解決され、クエリやフラグメントが違うと同一ソースでも別インスタンスになる。with { type: 'json' }以外のインポート属性は無視せず例外になる。CommonJSからESMをrequire()する場合はNode.jsのrequire(esm)に従い、グラフにトップレベルawaitがあると同期要求は失敗する。モジュールは最初のimport時に遅延コンパイルされ、WebAssemblyはソースフェーズimportでWebAssembly.Moduleを直接受け取れる。

従来レジストリはパス解決で、バンドル全体を事前コンパイルし、分離ごとに複製を持っていた。新実装はURLを前提に遅延とキャッシュ共有を設計している。既定の有効化日はまだ無く、互換日を進めても自動では入らない。

実務への影響

Vite 8とRolldownが残すモジュールグラフを、ランタイム側で正しく解決できる土台になる。import.meta.resolveやクエリ付きimportに依存するコードは、フラグを付けたプレビュー環境で先に検証しないと本番で挙動が変わる。既存Workerは従来実装のまま動き続ける。