From 87149a2aa065e9957cc4a8bae714c74b64f07b48 Mon Sep 17 00:00:00 2001 From: michalgrezel Date: Fri, 24 Oct 2025 13:02:44 +0200 Subject: [PATCH] feat: add serverExternals option to CloudflareOverrides and update build process --- packages/cloudflare/src/api/config.ts | 8 ++++++++ packages/cloudflare/src/cli/build/build.ts | 3 ++- packages/cloudflare/src/cli/build/bundle-server.ts | 5 +++-- packages/cloudflare/src/cli/commands/utils.ts | 7 ++++++- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/packages/cloudflare/src/api/config.ts b/packages/cloudflare/src/api/config.ts index d625f8bd8..2fc8af060 100644 --- a/packages/cloudflare/src/api/config.ts +++ b/packages/cloudflare/src/api/config.ts @@ -55,6 +55,11 @@ export type CloudflareOverrides = { * @default "none" */ routePreloadingBehavior?: RoutePreloadingBehavior; + + /** + * List of external modules to exclude from the server bundle. + */ + serverExternals?: string[]; }; /** @@ -71,6 +76,7 @@ export function defineCloudflareConfig(config: CloudflareOverrides = {}): OpenNe cachePurge, enableCacheInterception = false, routePreloadingBehavior = "none", + serverExternals = [], } = config; return { @@ -106,6 +112,7 @@ export function defineCloudflareConfig(config: CloudflareOverrides = {}): OpenNe }, assetResolver: () => assetResolver, }, + serverExternals, }; } @@ -180,6 +187,7 @@ interface OpenNextConfig extends AwsOpenNextConfig { maxVersionAgeDays?: number; }; }; + serverExternals?: string[]; } /** diff --git a/packages/cloudflare/src/cli/build/build.ts b/packages/cloudflare/src/cli/build/build.ts index 8f88f637d..5b2187ea5 100644 --- a/packages/cloudflare/src/cli/build/build.ts +++ b/packages/cloudflare/src/cli/build/build.ts @@ -8,6 +8,7 @@ import logger from "@opennextjs/aws/logger.js"; import type { Unstable_Config } from "wrangler"; import { OpenNextConfig } from "../../api/config.js"; +import { BuildOptions } from "../commands/utils.js"; import type { ProjectOptions } from "../project-options.js"; import { bundleServer } from "./bundle-server.js"; import { compileCacheAssetsManifestSqlFile } from "./open-next/compile-cache-assets-manifest.js"; @@ -29,7 +30,7 @@ import { getVersion } from "./utils/version.js"; * @param projectOpts The options for the project */ export async function build( - options: buildHelper.BuildOptions, + options: BuildOptions, config: OpenNextConfig, projectOpts: ProjectOptions, wranglerConfig: Unstable_Config diff --git a/packages/cloudflare/src/cli/build/bundle-server.ts b/packages/cloudflare/src/cli/build/bundle-server.ts index 954024513..96fa8efbe 100644 --- a/packages/cloudflare/src/cli/build/bundle-server.ts +++ b/packages/cloudflare/src/cli/build/bundle-server.ts @@ -3,11 +3,12 @@ import { readFile, writeFile } from "node:fs/promises"; import path from "node:path"; import { fileURLToPath } from "node:url"; -import { type BuildOptions, getPackagePath } from "@opennextjs/aws/build/helper.js"; +import { getPackagePath } from "@opennextjs/aws/build/helper.js"; import { ContentUpdater } from "@opennextjs/aws/plugins/content-updater.js"; import { build, type Plugin } from "esbuild"; import { getOpenNextConfig } from "../../api/config.js"; +import { BuildOptions } from "../commands/utils.js"; import type { ProjectOptions } from "../project-options.js"; import { patchVercelOgLibrary } from "./patches/ast/patch-vercel-og-library.js"; import { patchWebpackRuntime } from "./patches/ast/webpack-runtime.js"; @@ -111,7 +112,7 @@ export async function bundleServer(buildOpts: BuildOptions, projectOpts: Project // Apply updater updates, must be the last plugin updater.plugin, ] as Plugin[], - external: ["./middleware/handler.mjs"], + external: ["./middleware/handler.mjs", ...buildOpts.config.serverExternals || []], alias: { // Workers have `fetch` so the `node-fetch` polyfill is not needed "next/dist/compiled/node-fetch": path.join(buildOpts.outputDir, "cloudflare-templates/shims/fetch.js"), diff --git a/packages/cloudflare/src/cli/commands/utils.ts b/packages/cloudflare/src/cli/commands/utils.ts index 232b74373..485051f24 100644 --- a/packages/cloudflare/src/cli/commands/utils.ts +++ b/packages/cloudflare/src/cli/commands/utils.ts @@ -91,9 +91,14 @@ export function getNormalizedOptions(config: OpenNextConfig, buildDir = nextAppD const options = normalizeOptions(config, openNextDistDir, buildDir); logger.setLevel(options.debug ? "debug" : "info"); - return options; + return { + ...options, + config, + }; } +export type BuildOptions = ReturnType; + /** * Read the Wrangler config. *