題名の通りだが。。ちょっとしたメモである。
Wranglerで起動時にエラー
あるプロジェクトをwrangler devで起動したところ、 CloudflareSocket is not a constructor というエラーが出て起動に失敗した。このプロジェクトでは直前にprismaのバージョンアップグレードを実施しており、その直後に発生したエラーだった。なのでPrisma関連なのは明白なのだが、それをあまり連想させないエラーメッセージなので最初はよくわからなかった。
調べたところ、そのものずばりではないが関連するGithub Issueを見つけた:
https://github.com/cloudflare/workers-sdk/issues/9668#issuecomment-2997078971
どうもpg-cloudflareというパッケージのpackage.jsonの"exports"->"."内の"cloudflare"プロパティの直下に以下の内容を追記したら直ったよということらしい。
...
"workerd": {
"import": "./esm/index.mjs",
"require": "./dist/index.js"
},
...
で、実際直った。なんだこれは…
pg-cloudflareについて
そもそもこのパッケージの存在を知らなかったのだが(自分で入れた覚えはないのでどこかの依存関係で入ってきているだけという理解だった)、これはpgのパッケージに含まれている。:
https://github.com/brianc/node-postgres/tree/master/packages/pg-cloudflare
上のGithub Issueでいうと、wrangler@4.20.5とこのpg-cloudflareの相性が悪いらしく、これとセットだと冒頭のエラーがでるようだ。ただ自分の場合はwrangler@4.0.0でもこのエラーが出たのでwrangler@4.20.5が問題というわけではないと思う(違うバージョンでも起き得るということである)。
上記のpackage.jsonの修正は、node_modules/pg-cloudflare/package.jsonを直接修正することで対応した。しかし、このままだとCloudflare Workersにdeployしたときに同じエラーでビルドエラーになってしまうので、同じpackage.jsonをプロジェクト内でgit管理の対象とし、Cloudflare Workersが起動する前にビルド内で強制的にcpコマンドでこれを上書きすることで、一旦乗り切った。個人的にも全くスマートなやり方ではないという理解はあるのでなんとかしたいが、まあ動いたからいいかという感じで一旦様子を見ることにする。
バージョンなど
"@cloudflare/wrangler": "^1.21.0",
"@prisma/client": "6.10.1",
"@prisma/adapter-pg": "^6.10.1",
"pg": "8.14.1",
"prisma": "6.10.1",
"wrangler": "4.0.0"