-
Notifications
You must be signed in to change notification settings - Fork 84
Description
Describe the bug
I was upgrading from 0.5 to 1.x. On 0.5 I had serverExternalPackages: ["postgres"] in next.config.ts.
For 1.x, the build failed with The symbol "clearImmediate" has already been declared because postgre.js polyfill defines clearImmediate which is also imported from node:timers
banner: {
// We need to import them here, assigning them to `globalThis` does not work because node:timers use `globalThis` and thus create an infinite loop
// See https://github.com/cloudflare/workerd/blob/d6a764c/src/node/internal/internal_timers.ts#L56-L70
js: `import {setInterval, clearInterval, setTimeout, clearTimeout, setImmediate, clearImmediate} from "node:timers"`,
},
platform: "node",postgres.js define the clearImmediate function it the polyfill for cloudflare.
https://github.com/porsager/postgres/blob/master/cf/polyfills.js#L231-L233
function clearImmediate(id) {
tasks.delete(id)
}I tried setting env WRANGLER_BUILD_PLATFORM="node" from https://opennext.js.org/cloudflare/troubleshooting#my-app-fails-to-build-when-i-import-a-specific-npm-package they didn't work
Steps to reproduce
Full repo repo in https://github.com/at15/opennext-postgres-clear-immediate
Follow https://opennext.js.org/cloudflare/howtos/workerd to update next.config.ts
import type { NextConfig } from "next";
const nextConfig: NextConfig = {
/* config options here */
// From
// https://opennext.js.org/cloudflare/howtos/workerd
// https://opennext.js.org/cloudflare/troubleshooting#my-app-fails-to-build-when-i-import-a-specific-npm-package
serverExternalPackages: ["postgres"],
};
export default nextConfig;
// Enable calling `getCloudflareContext()` in `next dev`.
// See https://opennext.js.org/cloudflare/bindings#local-access-to-bindings.
import { initOpenNextCloudflareForDev } from "@opennextjs/cloudflare";
initOpenNextCloudflareForDev();
Build the app you will get
✘ [ERROR] Build failed with 1 error:
✘ [ERROR] The symbol "clearImmediate" has already been
declared
.open-next/server-functions/default/handler.mjs:289:40384:
289 │ ...lete(id))}),id}function clearImmediate(id){tasks.delete(id)}va...
╵ ~~~~~~~~~~~~~~
The symbol "clearImmediate" was originally declared here:
.open-next/server-functions/default/handler.mjs:1:76:
1 │ ...out, clearTimeout, setImmediate, clearImmediate} from "node:timers"
╵ ~~~~~~~~~~~~~~
Expected behavior
- Seems
serverExternalPackages: ["postgres"]is no longer required for havingpostgres.jsto work on worker with node compact flags. I removed it, deployed and the app is still working. WRANGLER_BUILD_PLATFORM="nodeseems does not change the export forpostgres.jsto stop using the cf polyfill
@opennextjs/cloudflare version
1.14.4
Wrangler version
4.53.0
next info output
Binaries:
Node: 25.2.1
npm: 11.6.2
Yarn: 1.22.22
pnpm: 10.13.1
Relevant Packages:
next: 15.5.7 // An outdated version detected (latest is 16.0.8), upgrade is highly recommended!
eslint-config-next: 15.4.6
react: 19.1.2
react-dom: 19.1.2
typescript: 5.9.3
Next.js Config:
output: N/A
⚠ An outdated version detected (latest is 16.0.8), upgrade is highly recommended!
Please try the latest canary version (`npm install next@canary`) to confirm the issue still exists before creating a new issue.
Read more - https://nextjs.org/docs/messages/opening-an-issueAdditional context
No response