Doesn't work with next.js Edge runtime
etodanik opened this issue · comments
I'm writing an app on next.js
which I plan to deploy to CloudFlare Pages + Workers. I know there's CloudFlare support, but when running the local development server of next.js, I get the following errors:
Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime
at <unknown> (webpack-internal:///(middleware)/./node_modules/next/dist/esm/server/web/globals.js:33)
at Object.get (webpack-internal:///(middleware)/./node_modules/next/dist/esm/server/web/globals.js:33:19)
at eval (webpack-internal:///(middleware)/./node_modules/pg/lib/crypto/utils-webcrypto.js:19:36)
at (middleware)/./node_modules/pg/lib/crypto/utils-webcrypto.js (file:///home/danny/src/project/.next/server/pages/api/manageUser.js:3097:1)
at __webpack_require__ (file:///home/danny/src/project/.next/server/edge-runtime-webpack.js:37:33)
at fn (file:///home/danny/src/project/.next/server/edge-runtime-webpack.js:286:21)
at eval (webpack-internal:///(middleware)/./node_modules/pg/lib/crypto/utils.js:7:22)
at (middleware)/./node_modules/pg/lib/crypto/utils.js (file:///home/danny/src/project/.next/server/pages/api/manageUser.js:3108:1)
at __webpack_require__ (file:///home/danny/src/project/.next/server/edge-runtime-webpack.js:37:33)
at fn (file:///home/danny/src/project/.next/server/edge-runtime-webpack.js:286:21)
at eval (webpack-internal:///(middleware)/./node_modules/pg/lib/crypto/sasl.js:3:16)
Would it make sense to generalize CloudFlare Workers detection into a broader Edge detection that also includes node edge runtime?
Yeah it would probably...how does one reproduce this issue locally? If running in node then pg
should be using the node pieces.
Set up a basic next.js
app, create an API endpoint, set its' runtime to edge by specifying:
export const runtime = 'edge';
And then assume to use node-postgres
from within that route.
CloudFlare Pages requires a next.js app to specify that all backend endpoints will be using the edge runtime.
There's a further complication that NodeEdge
runtime isn't the same as CloudFlare workers. I suppose next.js' NodeEdge is emulating what Vercel's edge runtime would look like. But one important detail is that it won't have the ability to run cloudflare:sockets
I am trying to use Prisma, PrismaPg and Pg.
Error: The edge runtime does not support Node.js 'crypto' module.
Call Stack
Next.js
eval
node_modules\.pnpm\pg@8.11.5\node_modules\pg\lib\crypto\utils-webcrypto.js (21:1)
(middleware)/./node_modules/.pnpm/pg@8.11.5/node_modules/pg/lib/crypto/utils-webcrypto.js
file:///C:/Code/React/nextplate/.next/server/middleware.js (1292:1)
Next.js
eval
node_modules\.pnpm\pg@8.11.5\node_modules\pg\lib\crypto\utils.js (8:3)
(middleware)/./node_modules/.pnpm/pg@8.11.5/node_modules/pg/lib/crypto/utils.js
file:///C:/Code/React/nextplate/.next/server/middleware.js (1303:1)
Next.js
eval
node_modules\.pnpm\pg@8.11.5\node_modules\pg\lib\crypto\sasl.js (2:16)
https://vercel.com/docs/functions/runtimes/edge-runtime#unsupported-apis
I know it's not really an issue related to Pg but I wanted to inform here anyway.