From f1f2fe02a09498ced491ea8d62efeb609c38b721 Mon Sep 17 00:00:00 2001 From: Katie Byers Date: Tue, 25 Oct 2022 10:34:48 -0700 Subject: [PATCH] exclude build-time files --- packages/nextjs/src/config/webpack.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/packages/nextjs/src/config/webpack.ts b/packages/nextjs/src/config/webpack.ts index 81e38cee6007..36c317f2b018 100644 --- a/packages/nextjs/src/config/webpack.ts +++ b/packages/nextjs/src/config/webpack.ts @@ -5,6 +5,7 @@ import { default as SentryWebpackPlugin } from '@sentry/webpack-plugin'; import * as chalk from 'chalk'; import * as fs from 'fs'; import * as path from 'path'; +import { WebpackPluginInstance } from 'webpack'; import { BuildContext, @@ -100,6 +101,22 @@ export function constructWebpackConfigFunction( ], }); } + + // Prevent `@vercel/nft` (which nextjs uses to determine which files are needed when packaging up a lambda) from + // including any of our build-time code or dependencies. (Otherwise it'll include files like this one and even the + // entirety of rollup and sucrase.) + const nftPlugin = newConfig.plugins?.find((plugin: WebpackPluginInstance) => { + const proto = Object.getPrototypeOf(plugin) as WebpackPluginInstance; + return proto.constructor.name === 'TraceEntryPointsPlugin'; + }) as WebpackPluginInstance & { excludeFiles: string[] }; + if (nftPlugin) { + nftPlugin.excludeFiles.push(path.join(__dirname, 'withSentryConfig.js')); + } else { + __DEBUG_BUILD__ && + logger.warn( + 'Unable to exclude Sentry build-time helpers from nft files. Could not find `TraceEntryPointsPlugin`.', + ); + } } // The SDK uses syntax (ES6 and ES6+ features like object spread) which isn't supported by older browsers. For users