Skip to content

[BUG] serverExternalPackages postgres cause build failed with The symbol "clearImmediate" has already been declared #1036

@at15

Description

@at15

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

From https://github.com/opennextjs/opennextjs-cloudflare/blame/721bff023068c93bba830fe897de8314e71b3a5b/packages/cloudflare/src/cli/build/bundle-server.ts#L155

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 having postgres.js to work on worker with node compact flags. I removed it, deployed and the app is still working.
  • WRANGLER_BUILD_PLATFORM="node seems does not change the export for postgres.js to 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-issue

Additional context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingtriage

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions