Closed1

TanStack Start/CF Pages, Error: Context is not available

nakasyounakasyou

経緯

Cloudflare Pages 上に TanStack Start (Solid.js) デプロイして変なエラー

Error: Context is not available at http://127.0.0.1:8788/_build/assets/client-Dn_RA0k1.js:2:70484 at Object.parse (http://127.0.0.1:8788/_build/assets/client-Dn_RA0k1.js:2:70248) at Object.<anonymous> (http://127.0.0.1:8788/_build/assets/client-Dn_RA0k1.js:2:69674) at JSON.parse (<anonymous>) at Object.parse (http://127.0.0.1:8788/_build/assets/client-Dn_RA0k1.js:2:69572) at http://127.0.0.1:8788/_build/assets/client-Dn_RA0k1.js:2:71684 at Array.forEach (<anonymous>) at Vs (http://127.0.0.1:8788/_build/assets/client-Dn_RA0k1.js:2:71387) at Xi (http://127.0.0.1:8788/_build/assets/client-Dn_RA0k1.js:4:15067) at http://127.0.0.1:8788/_build/assets/client-Dn_RA0k1.js:2:8930

HTML の中にエラーが書いてあって、ステータスは 200 OK

理由/修正

TanStack Start は Vinxi というフレームワークつくるフレームワークに依存していて、Vinxi は Nitro という Web アプリケーションフレームワークに依存指定いる。
Nitro は AsyncLocalStorage に依存していて、Cloudflare Workers の nodejs_compat の有無を見て AsyncLocalStorage の import を決めているっぽい。import しない場合、エラー吐く。

wrangler.toml に nodejs_compat があるかを自動的に読み取っているが、wrangler.toml が Cloudflare Pages のビルド環境になかったためエラー吐いた。

export default defineConfig({
  tsr: {
    appDirectory: 'src',
  },
  server: {
    preset: 'cloudflare-pages',
    cloudflare: { nodeCompat: true } // 追加
  },

参考

https://github.com/nitrojs/nitro/blob/26ab7988ffd23615190041308deeb2a5bb125465/src/presets/cloudflare/utils.ts#L206

このスクラップは5ヶ月前にクローズされました