From b09bfd51cece5e88fe8314668a591ab11de36b4d Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Wed, 1 Apr 2026 12:27:00 +0100 Subject: [PATCH] fix: exclude virtual:emdash from optimizeDeps to fix npm installs on Cloudflare --- .changeset/fix-virtual-module-optimizedeps.md | 5 +++++ packages/core/src/astro/integration/vite-config.ts | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 .changeset/fix-virtual-module-optimizedeps.md diff --git a/.changeset/fix-virtual-module-optimizedeps.md b/.changeset/fix-virtual-module-optimizedeps.md new file mode 100644 index 0000000..d25e7a6 --- /dev/null +++ b/.changeset/fix-virtual-module-optimizedeps.md @@ -0,0 +1,5 @@ +--- +"emdash": patch +--- + +Fix virtual module resolution errors when emdash is installed from npm on Cloudflare. The esbuild dependency pre-bundler was encountering `virtual:emdash/*` imports while crawling dist files and failing to resolve them. These are now excluded from the optimizeDeps scan. diff --git a/packages/core/src/astro/integration/vite-config.ts b/packages/core/src/astro/integration/vite-config.ts index e5e19ff..07ac986 100644 --- a/packages/core/src/astro/integration/vite-config.ts +++ b/packages/core/src/astro/integration/vite-config.ts @@ -269,6 +269,13 @@ export function createViteConfig( // Vite discovers them one-by-one on first request, causing workerd // to enter "worker cancelled" state on cold cache. optimizeDeps: { + // Exclude EmDash virtual modules from esbuild's dependency + // scan. These are resolved by the Vite plugin at transform time, + // but esbuild encounters them when crawling emdash's dist files + // during pre-bundling and can't resolve them. Vite's exclude + // uses prefix matching (id.startsWith(m + "/")), so + // "virtual:emdash" matches all "virtual:emdash/*" imports. + exclude: ["virtual:emdash"], include: [ // EmDash direct deps "emdash > @portabletext/toolkit", @@ -322,7 +329,7 @@ export function createViteConfig( include: useSource ? ["@astrojs/react/client.js"] : ["@emdash-cms/admin", "@astrojs/react/client.js"], - exclude: cloudflare ? [] : NODE_NATIVE_EXTERNALS, + exclude: cloudflare ? ["virtual:emdash"] : [...NODE_NATIVE_EXTERNALS, "virtual:emdash"], }, }; }