diff --git a/.changeset/few-beds-dance.md b/.changeset/few-beds-dance.md new file mode 100644 index 00000000..927efa76 --- /dev/null +++ b/.changeset/few-beds-dance.md @@ -0,0 +1,5 @@ +--- +'@astrojs/cloudflare': patch +--- + +Fixes chunk issues when bundling node_modules dependencies diff --git a/packages/cloudflare/src/index.ts b/packages/cloudflare/src/index.ts index 1675dfc1..3f55f693 100644 --- a/packages/cloudflare/src/index.ts +++ b/packages/cloudflare/src/index.ts @@ -259,6 +259,21 @@ export default function createIntegration(args?: Options): AstroIntegration { vite.build.rollupOptions.output.banner ||= 'globalThis.process ??= {}; globalThis.process.env ??= {};'; + // @ts-expect-error + vite.build.rollupOptions.output.manualChunks = (id: string) => { + if (id.includes('node_modules')) { + if (id.indexOf('node_modules') !== -1) { + const basic = id.toString().split('node_modules/')[1]; + const sub1 = basic.split('/')[0]; + if (sub1 !== '.pnpm') { + return sub1.toString(); + } + const name2 = basic.split('/')[1]; + return name2.split('@')[name2[0] === '@' ? 1 : 0].toString(); + } + } + }; + vite.build.rollupOptions.external = _config.vite.build?.rollupOptions?.external ?? []; // Cloudflare env is only available per request. This isn't feasible for code that access env vars @@ -278,6 +293,12 @@ export default function createIntegration(args?: Options): AstroIntegration { vite.resolve.conditions = vite.resolve.conditions.filter( (c) => c !== 'workerd' && c !== 'worker' ); + + vite.build ||= {}; + vite.build.rollupOptions ||= {}; + vite.build.rollupOptions.output ||= {}; + // @ts-expect-error + vite.build.rollupOptions.output.manualChunks = undefined; } }, 'astro:build:done': async ({ pages, routes, dir, logger }) => {