📚
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"],
...
}
おわりに
この情報は2025/12/01時点ではjoseのリポジトリには記載されていない。
下手すると結構時間を溶かすのでは。
同じ悩みを味わった人の助けになることを願います。
Discussion