1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Wrangler】と【Prisma】で"CloudflareSocket is not a constructor"というエラーが起きたので回避した話

Posted at

題名の通りだが。。ちょっとしたメモである。

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"
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?