From 0bc4291a592a95275856c2da6b9f566d002b8dd2 Mon Sep 17 00:00:00 2001 From: Jiachi Liu Date: Wed, 8 May 2024 17:24:58 +0200 Subject: [PATCH] Remove ineffective webpack rules and unused app-page context modules (#65321) ### What * Remove the `private-next-app-dir` condition for `WEBPACK_LAYERS.appRouteHandler` layer since it's not effective as the `rule.test` will match the actual file path. App routes are actually bundled in rsc layer atm as expected. * Should only let shared-runtime modules working in either ssr layer or non-layer (unbundling pages router). * Remove the pages router context modules for app-page runtime. Still need to keep amp-context as it's used in `head.js` and `head.js` used in `next/image`. Not easy to remove unless we have separate implementation of `next/image` for pages and app router Closes NEXT-3312 --- packages/next/src/build/webpack-config.ts | 30 +++++-------------- .../plugins/next-types-plugin/index.ts | 6 +--- packages/next/src/lib/constants.ts | 9 ++---- .../app-page/vendored/contexts/entrypoints.ts | 3 -- .../vendored/contexts/html-context.ts | 3 -- .../vendored/contexts/loadable-context.ts | 3 -- .../app-page/vendored/contexts/loadable.ts | 1 - 7 files changed, 11 insertions(+), 44 deletions(-) delete mode 100644 packages/next/src/server/future/route-modules/app-page/vendored/contexts/html-context.ts delete mode 100644 packages/next/src/server/future/route-modules/app-page/vendored/contexts/loadable-context.ts delete mode 100644 packages/next/src/server/future/route-modules/app-page/vendored/contexts/loadable.ts diff --git a/packages/next/src/build/webpack-config.ts b/packages/next/src/build/webpack-config.ts index 483b3361eb488..e5a47e5385e7e 100644 --- a/packages/next/src/build/webpack-config.ts +++ b/packages/next/src/build/webpack-config.ts @@ -1272,14 +1272,6 @@ export default async function getBaseWebpackConfig( }, ...(hasAppDir ? [ - { - layer: WEBPACK_LAYERS.appRouteHandler, - test: new RegExp( - `private-next-app-dir\\/.*\\/route\\.(${pageExtensions.join( - '|' - )})$` - ), - }, { // Make sure that AsyncLocalStorage module instance is shared between server and client // layers. @@ -1699,23 +1691,17 @@ export default async function getBaseWebpackConfig( '.shared-runtime' ) const layer = resource.contextInfo.issuerLayer - let runtime - switch (layer) { - case WEBPACK_LAYERS.appRouteHandler: - runtime = 'app-route' - break - case WEBPACK_LAYERS.serverSideRendering: - case WEBPACK_LAYERS.reactServerComponents: - case WEBPACK_LAYERS.appPagesBrowser: - case WEBPACK_LAYERS.actionBrowser: - runtime = 'app-page' - break - default: - runtime = 'pages' + if (layer === WEBPACK_LAYERS.serverSideRendering) { + runtime = 'app-page' + } else if (!layer) { + runtime = 'pages' + } else { + throw new Error( + `shared-runtime module ${moduleName} cannot be used in ${layer} layer` + ) } - resource.request = `next/dist/server/future/route-modules/${runtime}/vendored/contexts/${moduleName}` } ), diff --git a/packages/next/src/build/webpack/plugins/next-types-plugin/index.ts b/packages/next/src/build/webpack/plugins/next-types-plugin/index.ts index 64265157ef8a1..2af4364d13107 100644 --- a/packages/next/src/build/webpack/plugins/next-types-plugin/index.ts +++ b/packages/next/src/build/webpack/plugins/next-types-plugin/index.ts @@ -613,11 +613,7 @@ export class NextTypesPlugin { } return } - if ( - mod.layer !== WEBPACK_LAYERS.reactServerComponents && - mod.layer !== WEBPACK_LAYERS.appRouteHandler - ) - return + if (mod.layer !== WEBPACK_LAYERS.reactServerComponents) return const IS_LAYOUT = /[/\\]layout\.[^./\\]+$/.test(mod.resource) const IS_PAGE = !IS_LAYOUT && /[/\\]page\.[^.]+$/.test(mod.resource) diff --git a/packages/next/src/lib/constants.ts b/packages/next/src/lib/constants.ts index f8ebd11e33c13..ffce24ceb5b6d 100644 --- a/packages/next/src/lib/constants.ts +++ b/packages/next/src/lib/constants.ts @@ -115,7 +115,8 @@ const WEBPACK_LAYERS_NAMES = { */ shared: 'shared', /** - * React Server Components layer (rsc). + * The layer for server-only runtime and picking up `react-server` export conditions. + * Including app router RSC pages and app router custom routes. */ reactServerComponents: 'rsc', /** @@ -150,10 +151,6 @@ const WEBPACK_LAYERS_NAMES = { * The server bundle layer for metadata routes. */ appMetadataRoute: 'app-metadata-route', - /** - * The layer for the server bundle for App Route handlers. - */ - appRouteHandler: 'app-route-handler', } as const export type WebpackLayerName = @@ -166,7 +163,6 @@ const WEBPACK_LAYERS = { WEBPACK_LAYERS_NAMES.reactServerComponents, WEBPACK_LAYERS_NAMES.actionBrowser, WEBPACK_LAYERS_NAMES.appMetadataRoute, - WEBPACK_LAYERS_NAMES.appRouteHandler, WEBPACK_LAYERS_NAMES.instrument, ], clientOnly: [ @@ -182,7 +178,6 @@ const WEBPACK_LAYERS = { WEBPACK_LAYERS_NAMES.reactServerComponents, WEBPACK_LAYERS_NAMES.actionBrowser, WEBPACK_LAYERS_NAMES.appMetadataRoute, - WEBPACK_LAYERS_NAMES.appRouteHandler, WEBPACK_LAYERS_NAMES.serverSideRendering, WEBPACK_LAYERS_NAMES.appPagesBrowser, WEBPACK_LAYERS_NAMES.shared, diff --git a/packages/next/src/server/future/route-modules/app-page/vendored/contexts/entrypoints.ts b/packages/next/src/server/future/route-modules/app-page/vendored/contexts/entrypoints.ts index 52274993f0abc..d117df846ddad 100644 --- a/packages/next/src/server/future/route-modules/app-page/vendored/contexts/entrypoints.ts +++ b/packages/next/src/server/future/route-modules/app-page/vendored/contexts/entrypoints.ts @@ -3,8 +3,5 @@ export * as ServerInsertedHtml from '../../../../../../shared/lib/server-inserte export * as AppRouterContext from '../../../../../../shared/lib/app-router-context.shared-runtime' export * as HooksClientContext from '../../../../../../shared/lib/hooks-client-context.shared-runtime' export * as RouterContext from '../../../../../../shared/lib/router-context.shared-runtime' -export * as HtmlContext from '../../../../../../shared/lib/html-context.shared-runtime' export * as AmpContext from '../../../../../../shared/lib/amp-context.shared-runtime' -export * as LoadableContext from '../../../../../../shared/lib/loadable-context.shared-runtime' export * as ImageConfigContext from '../../../../../../shared/lib/image-config-context.shared-runtime' -export * as Loadable from '../../../../../../shared/lib/loadable.shared-runtime' diff --git a/packages/next/src/server/future/route-modules/app-page/vendored/contexts/html-context.ts b/packages/next/src/server/future/route-modules/app-page/vendored/contexts/html-context.ts deleted file mode 100644 index ae1126abb6f99..0000000000000 --- a/packages/next/src/server/future/route-modules/app-page/vendored/contexts/html-context.ts +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = require('../../module.compiled').vendored[ - 'contexts' -].HtmlContext diff --git a/packages/next/src/server/future/route-modules/app-page/vendored/contexts/loadable-context.ts b/packages/next/src/server/future/route-modules/app-page/vendored/contexts/loadable-context.ts deleted file mode 100644 index de9e07464c6fb..0000000000000 --- a/packages/next/src/server/future/route-modules/app-page/vendored/contexts/loadable-context.ts +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = require('../../module.compiled').vendored[ - 'contexts' -].LoadableContext diff --git a/packages/next/src/server/future/route-modules/app-page/vendored/contexts/loadable.ts b/packages/next/src/server/future/route-modules/app-page/vendored/contexts/loadable.ts deleted file mode 100644 index f67d05a251655..0000000000000 --- a/packages/next/src/server/future/route-modules/app-page/vendored/contexts/loadable.ts +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('../../module.compiled').vendored['contexts'].Loadable