題名の通りだが。。ちょっとしたメモである。
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"