📚

OpenNext(Cloudflare adapter)でjoseを使う時に忘れてはならないserverExternalPackages

に公開

結論

OpenNext(Cloudflare adapter)でjoseを使う際は serverExternalPackages を忘れないようにしよう。

// next.config.ts
const nextConfig: NextConfig = {
    ...
    serverExternalPackages: ["jose"],
    ...
}

事の経緯

OpenNextでjoseを使って jwtVerify するときに起こった問題。
next dev でアプリケーションを起動しているときには問題はないけど、opennextjs-cloudflare build && opennextjs-cloudflare preview で起動するときには毎回リクエストがタイムアウト!なんじゃこりゃ!

Wranglerの問題?OpenNextの問題?と小一時間悩む。

改めて結論

workerd (CloudflareのJavaScript/Wasmランタイム) 用に独自にコードが書かれているライブラリの場合、Next.jsのバンドル対象から外し、workerd側の実装を利用するようserverExternalPackages で指示する必要がある。

// next.config.ts
const nextConfig: NextConfig = {
    ...
    serverExternalPackages: ["jose"],
    ...
}

https://opennext.js.org/cloudflare/howtos/workerd

おわりに

この情報は2025/12/01時点ではjoseのリポジトリには記載されていない。
下手すると結構時間を溶かすのでは。
同じ悩みを味わった人の助けになることを願います。

Discussion