diff --git a/packages/next/build/webpack/plugins/middleware-plugin.ts b/packages/next/build/webpack/plugins/middleware-plugin.ts index a992c1a5dccee..335b4520ac7f1 100644 --- a/packages/next/build/webpack/plugins/middleware-plugin.ts +++ b/packages/next/build/webpack/plugins/middleware-plugin.ts @@ -205,7 +205,12 @@ export default class MiddlewarePlugin { }) const handler = (parser: webpack5.javascript.JavascriptParser) => { + const isMiddlewareModule = () => + parser.state.module && parser.state.module.layer === 'middleware' + const wrapExpression = (expr: any) => { + if (!isMiddlewareModule()) return + if (dev) { const dep1 = new wp.dependencies.ConstDependency( '__next_eval__(function() { return ', @@ -242,10 +247,14 @@ export default class MiddlewarePlugin { } const expressionHandler = () => { + if (!isMiddlewareModule()) return + wp.optimize.InnerGraph.onUsage(parser.state, flagModule) } const ignore = () => { + if (!isMiddlewareModule()) return + return true } @@ -282,12 +291,7 @@ export default class MiddlewarePlugin { .tap(PLUGIN_NAME, ignore) const memberChainHandler = (_expr: any, members: string[]) => { - if ( - !parser.state.module || - parser.state.module.layer !== 'middleware' - ) { - return - } + if (!isMiddlewareModule()) return if (members.length >= 2 && members[0] === 'env') { const envName = members[1] diff --git a/test/integration/middleware/with-eval/lib/utils.js b/test/integration/middleware/with-eval/lib/utils.js index 3c17949f4c9f0..60fdfbe824117 100644 --- a/test/integration/middleware/with-eval/lib/utils.js +++ b/test/integration/middleware/with-eval/lib/utils.js @@ -6,3 +6,8 @@ export async function usingEval() { export async function notUsingEval() { return { value: 100 } } + +export function usingEvalSync() { + // eslint-disable-next-line no-eval + return { value: eval('100') } +} diff --git a/test/integration/middleware/with-eval/pages/index.js b/test/integration/middleware/with-eval/pages/index.js new file mode 100644 index 0000000000000..e9e193bcad67e --- /dev/null +++ b/test/integration/middleware/with-eval/pages/index.js @@ -0,0 +1,15 @@ +import { usingEvalSync, usingEval } from '../lib/utils' + +export async function getServerSideProps() { + return { + props: await usingEval(), + } +} + +export default function Page(props) { + return ( +