From 408ba35b0b086b666a0d9451d772883aedef2846 Mon Sep 17 00:00:00 2001 From: Mateusz Bocian Date: Thu, 18 Sep 2025 16:46:13 -0400 Subject: [PATCH 1/2] chore: clean up unused code path --- src/build/functions/edge.ts | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/build/functions/edge.ts b/src/build/functions/edge.ts index 354887d92e..01c85dd342 100644 --- a/src/build/functions/edge.ts +++ b/src/build/functions/edge.ts @@ -313,17 +313,11 @@ const buildHandlerDefinition = ( ctx: PluginContext, def: EdgeOrNodeMiddlewareDefinition, ): Array => { - const functionHandlerName = getHandlerName({ name: def.name }) - const functionName = 'Next.js Middleware Handler' - const cache = def.name.endsWith('middleware') ? undefined : ('manual' as const) - const generator = `${ctx.pluginName}@${ctx.pluginVersion}` - return augmentMatchers(def.matchers, ctx).map((matcher) => ({ - function: functionHandlerName, - name: functionName, + function: getHandlerName({ name: def.name }), + name: 'Next.js Middleware Handler', pattern: matcher.regexp, - cache, - generator, + generator: `${ctx.pluginName}@${ctx.pluginVersion}`, })) } From c945b88b1f76e26d59a139d5de2bd2e748f0a994 Mon Sep 17 00:00:00 2001 From: Mateusz Bocian Date: Thu, 18 Sep 2025 16:46:47 -0400 Subject: [PATCH 2/2] fix: patch upstream pnpm issue --- src/build/content/server.ts | 29 ++++++++++++++++++++++++++++- src/build/plugin-context.ts | 2 +- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/build/content/server.ts b/src/build/content/server.ts index e5beb3ef54..8aa2287be4 100644 --- a/src/build/content/server.ts +++ b/src/build/content/server.ts @@ -299,7 +299,13 @@ export const copyNextDependencies = async (ctx: PluginContext): Promise => } const src = join(ctx.standaloneDir, entry) const dest = join(ctx.serverHandlerDir, entry) - await cp(src, dest, { recursive: true, verbatimSymlinks: true, force: true }) + const filter = ctx.constants.IS_LOCAL ? undefined : nodeModulesFilter + await cp(src, dest, { + recursive: true, + verbatimSymlinks: true, + force: true, + filter, + }) if (entry === 'node_modules') { await recreateNodeModuleSymlinks(ctx.resolveFromSiteDir('node_modules'), dest) @@ -438,3 +444,24 @@ export const verifyHandlerDirStructure = async (ctx: PluginContext) => { ) } } + +// This is a workaround for Next.js installations in a pnpm+glibc context +// Patch required due to an intermittent upstream issue in the npm/pnpm ecosystem +// https://github.com/pnpm/pnpm/issues/9654 +// https://github.com/pnpm/pnpm/issues/5928 +// https://github.com/pnpm/pnpm/issues/7362 (persisting even though ticket is closed) +const nodeModulesFilter = async (sourcePath: string) => { + // Filtering rule for the following packages: + // - @rspack+binding-linux-x64-musl + // - @swc+core-linux-x64-musl + // - @img+sharp-linuxmusl-x64 + // - @img+sharp-libvips-linuxmusl-x64 + if ( + sourcePath.includes('.pnpm') && + (sourcePath.includes('linuxmusl-x64') || sourcePath.includes('linux-x64-musl')) + ) { + return false + } + + return true +} diff --git a/src/build/plugin-context.ts b/src/build/plugin-context.ts index c97b6a3b98..63b09901ef 100644 --- a/src/build/plugin-context.ts +++ b/src/build/plugin-context.ts @@ -44,13 +44,13 @@ export interface ExportDetail { } export class PluginContext { + constants: NetlifyPluginConstants featureFlags: NetlifyPluginOptions['featureFlags'] netlifyConfig: NetlifyPluginOptions['netlifyConfig'] pluginName: string pluginVersion: string utils: NetlifyPluginUtils - private constants: NetlifyPluginConstants private packageJSON: { name: string; version: string } & Record /** Absolute path of the next runtime plugin directory */