From 4499e3bbaffc53d0024dbac81760992804b028dc Mon Sep 17 00:00:00 2001 From: Shu Ding Date: Wed, 23 Feb 2022 18:44:02 +0100 Subject: [PATCH 1/2] refactor entries generation of hot-reloader --- packages/next/build/entries.ts | 4 +- packages/next/build/utils.ts | 10 ++-- packages/next/server/dev/hot-reloader.ts | 61 ++++++++++++------------ 3 files changed, 38 insertions(+), 37 deletions(-) diff --git a/packages/next/build/entries.ts b/packages/next/build/entries.ts index f188ca2198c985e..15f3ab1a7c1e20e 100644 --- a/packages/next/build/entries.ts +++ b/packages/next/build/entries.ts @@ -117,6 +117,8 @@ export function createEntrypoints( Object.keys(config.publicRuntimeConfig).length > 0 || Object.keys(config.serverRuntimeConfig).length > 0 + const edgeRuntime = config.experimental.runtime === 'edge' + const defaultServerlessOptions = { absoluteAppPath: pages['/_app'], absoluteDocumentPath: pages['/_document'], @@ -157,8 +159,6 @@ export function createEntrypoints( const isCustomError = isCustomErrorPage(page) const isFlight = isFlightPage(config, absolutePagePath) - const edgeRuntime = config.experimental.runtime === 'edge' - if (page.match(MIDDLEWARE_ROUTE)) { const loaderOpts: MiddlewareLoaderOptions = { absolutePagePath: pages[page], diff --git a/packages/next/build/utils.ts b/packages/next/build/utils.ts index e1c8adf323c3734..1c81b8abc9395e8 100644 --- a/packages/next/build/utils.ts +++ b/packages/next/build/utils.ts @@ -1111,23 +1111,23 @@ export function getRawPageExtensions(pageExtensions: string[]): string[] { export function isFlightPage( nextConfig: NextConfigComplete, - pagePath: string + path: string ): boolean { if ( !( nextConfig.experimental.serverComponents && nextConfig.experimental.runtime ) - ) + ) { return false + } const rawPageExtensions = getRawPageExtensions( nextConfig.pageExtensions || [] ) - const isRscPage = rawPageExtensions.some((ext) => { - return new RegExp(`\\.server\\.${ext}$`).test(pagePath) + return rawPageExtensions.some((ext) => { + return path.endsWith(`.server.${ext}`) }) - return isRscPage } export function getUnresolvedModuleFromError( diff --git a/packages/next/server/dev/hot-reloader.ts b/packages/next/server/dev/hot-reloader.ts index 0c6454f8072bc64..8d28e96c2af57b0 100644 --- a/packages/next/server/dev/hot-reloader.ts +++ b/packages/next/server/dev/hot-reloader.ts @@ -477,8 +477,6 @@ export default class HotReloader { return } - const isApiRoute = page.match(API_ROUTE) - if (!isClientCompilation && isMiddleware) { return } @@ -491,18 +489,15 @@ export default class HotReloader { return } + const isApiRoute = page.match(API_ROUTE) const isCustomError = isCustomErrorPage(page) const isReserved = isReservedPage(page) const isServerComponent = this.hasServerComponents && isFlightPage(this.config, absolutePagePath) + const isEdgeSSRPage = this.runtime === 'edge' && !isApiRoute - if ( - isNodeServerCompilation && - this.runtime === 'edge' && - !isApiRoute && - !isCustomError - ) { + if (isNodeServerCompilation && isEdgeSSRPage && !isCustomError) { return } @@ -512,28 +507,34 @@ export default class HotReloader { absolutePagePath, } - if (isClientCompilation && isMiddleware) { - entrypoints[bundlePath] = finalizeEntrypoint({ - name: bundlePath, - value: `next-middleware-loader?${stringify(pageLoaderOpts)}!`, - isServer: false, - isMiddleware: true, - }) - } else if (isClientCompilation) { - entrypoints[bundlePath] = finalizeEntrypoint({ - name: bundlePath, - value: `next-client-pages-loader?${stringify(pageLoaderOpts)}!`, - isServer: false, - }) + if (isClientCompilation) { + if (isMiddleware) { + // Middleware + entrypoints[bundlePath] = finalizeEntrypoint({ + name: bundlePath, + value: `next-middleware-loader?${stringify(pageLoaderOpts)}!`, + isServer: false, + isMiddleware: true, + }) + } else { + // A page route + entrypoints[bundlePath] = finalizeEntrypoint({ + name: bundlePath, + value: `next-client-pages-loader?${stringify( + pageLoaderOpts + )}!`, + isServer: false, + }) - if (isServerComponent) { - ssrEntries.set(bundlePath, { requireFlightManifest: true }) - } else if ( - this.runtime === 'edge' && - !isReserved && - !isCustomError - ) { - ssrEntries.set(bundlePath, { requireFlightManifest: false }) + // Tell the middleware plugin of the client compilation + // that this route is a page. + if (isEdgeSSRPage) { + if (isServerComponent) { + ssrEntries.set(bundlePath, { requireFlightManifest: true }) + } else if (!isCustomError && !isReserved) { + ssrEntries.set(bundlePath, { requireFlightManifest: false }) + } + } } } else if (isEdgeServerCompilation) { if (!isReserved) { @@ -555,7 +556,7 @@ export default class HotReloader { isEdgeServer: true, }) } - } else { + } else if (isNodeServerCompilation) { let request = relative(config.context!, absolutePagePath) if (!isAbsolute(request) && !request.startsWith('../')) { request = `./${request}` From 3097fec7512a0326093e1f99b401924b80a5999d Mon Sep 17 00:00:00 2001 From: Shu Ding Date: Thu, 24 Feb 2022 00:53:13 +0100 Subject: [PATCH 2/2] change parameter name --- packages/next/build/utils.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/next/build/utils.ts b/packages/next/build/utils.ts index 1c81b8abc9395e8..4fd4d8c9a19afde 100644 --- a/packages/next/build/utils.ts +++ b/packages/next/build/utils.ts @@ -1111,7 +1111,7 @@ export function getRawPageExtensions(pageExtensions: string[]): string[] { export function isFlightPage( nextConfig: NextConfigComplete, - path: string + filePath: string ): boolean { if ( !( @@ -1126,7 +1126,7 @@ export function isFlightPage( nextConfig.pageExtensions || [] ) return rawPageExtensions.some((ext) => { - return path.endsWith(`.server.${ext}`) + return filePath.endsWith(`.server.${ext}`) }) }