From 8219791b72424892f197d54300e508f74acae876 Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Tue, 16 Aug 2022 15:18:11 +0100 Subject: [PATCH 1/7] fix next-app-loader on windows --- packages/next/build/webpack/loaders/next-app-loader.ts | 8 ++++---- .../webpack/loaders/next-flight-client-entry-loader.ts | 5 ++++- packages/next/server/dev/hot-reloader.ts | 9 ++++++--- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/packages/next/build/webpack/loaders/next-app-loader.ts b/packages/next/build/webpack/loaders/next-app-loader.ts index 2f1e9ed84e7..a25d53932d6 100644 --- a/packages/next/build/webpack/loaders/next-app-loader.ts +++ b/packages/next/build/webpack/loaders/next-app-loader.ts @@ -12,7 +12,7 @@ async function createTreeCodeFromPath({ removeExt: (pathToRemoveExtensions: string) => string }) { let tree: undefined | string - const splittedPath = pagePath.split('/') + const splittedPath = pagePath.split(/[\\/]/) const appDirPrefix = splittedPath[0] const segments = ['', ...splittedPath.slice(1)] @@ -25,7 +25,7 @@ async function createTreeCodeFromPath({ // First item in the list is the page which can't have layouts by itself if (i === segments.length - 1) { // Use '' for segment as it's the page. There can't be a segment called '' so this is the safest way to add it. - tree = `['', {}, {page: () => require('${pagePath}')}]` + tree = `['', {}, {page: () => require(${JSON.stringify(pagePath)})}]` continue } @@ -48,12 +48,12 @@ async function createTreeCodeFromPath({ }, { ${ resolvedLayoutPath - ? `layout: () => require('${resolvedLayoutPath}'),` + ? `layout: () => require(${JSON.stringify(resolvedLayoutPath)}),` : '' } ${ resolvedLoadingPath - ? `loading: () => require('${resolvedLoadingPath}'),` + ? `loading: () => require(${JSON.stringify(resolvedLoadingPath)}),` : '' } }]` diff --git a/packages/next/build/webpack/loaders/next-flight-client-entry-loader.ts b/packages/next/build/webpack/loaders/next-flight-client-entry-loader.ts index e30d5037569..a744b9894d6 100644 --- a/packages/next/build/webpack/loaders/next-flight-client-entry-loader.ts +++ b/packages/next/build/webpack/loaders/next-flight-client-entry-loader.ts @@ -21,7 +21,10 @@ export default async function transformSource(this: any): Promise { requests // Filter out css files on the server .filter((request) => (isServer ? !request.endsWith('.css') : true)) - .map((request) => `import(/* webpackMode: "eager" */ '${request}')`) + .map( + (request) => + `import(/* webpackMode: "eager" */ ${JSON.stringify(request)})` + ) .join(';\n') + ` export const __next_rsc__ = { diff --git a/packages/next/server/dev/hot-reloader.ts b/packages/next/server/dev/hot-reloader.ts index de362f9b5a5..ffb1e74d8b9 100644 --- a/packages/next/server/dev/hot-reloader.ts +++ b/packages/next/server/dev/hot-reloader.ts @@ -4,7 +4,7 @@ import type { CustomRoutes } from '../../lib/load-custom-routes' import { getOverlayMiddleware } from 'next/dist/compiled/@next/react-dev-overlay/dist/middleware' import { IncomingMessage, ServerResponse } from 'http' import { WebpackHotMiddleware } from './hot-middleware' -import { join, relative, isAbsolute } from 'path' +import { join, relative, isAbsolute, posix } from 'path' import { UrlObject } from 'url' import { createEntrypoints, @@ -666,9 +666,12 @@ export default class HotReloader { this.appDir && bundlePath.startsWith('app/') ? getAppEntry({ name: bundlePath, - pagePath: join( + pagePath: posix.join( APP_DIR_ALIAS, - relative(this.appDir!, entryData.absolutePagePath) + relative( + this.appDir!, + entryData.absolutePagePath + ).replace(/\\/g, '/') ), appDir: this.appDir!, pageExtensions: this.config.pageExtensions, From 565a70e932c8485da3be886c776ab036187ce516 Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Tue, 16 Aug 2022 15:44:54 +0100 Subject: [PATCH 2/7] fix regexp for windows --- packages/next/build/webpack/loaders/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/next/build/webpack/loaders/utils.ts b/packages/next/build/webpack/loaders/utils.ts index a06143433df..f5274be1314 100644 --- a/packages/next/build/webpack/loaders/utils.ts +++ b/packages/next/build/webpack/loaders/utils.ts @@ -39,7 +39,7 @@ export function buildExports(moduleExports: any, isESM: boolean) { export const clientComponentRegex = new RegExp( '(' + `\\.client(\\.(${defaultJsFileExtensions.join('|')}))?|` + - `next/(${nextClientComponents.join('|')})(\\.js)?|` + + `next[\\\\/](${nextClientComponents.join('|')})(\\.js)?|` + `\\.(${imageExtensions.join('|')})` + ')$' ) From d4d364e81023af1eccfea672c15e8c332a60e50d Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Tue, 16 Aug 2022 15:58:17 +0100 Subject: [PATCH 3/7] fix module id on windows --- packages/next/build/webpack/plugins/flight-manifest-plugin.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/next/build/webpack/plugins/flight-manifest-plugin.ts b/packages/next/build/webpack/plugins/flight-manifest-plugin.ts index 0cf8f816557..2dcc2997f01 100644 --- a/packages/next/build/webpack/plugins/flight-manifest-plugin.ts +++ b/packages/next/build/webpack/plugins/flight-manifest-plugin.ts @@ -155,7 +155,8 @@ export class FlightManifestPlugin { mod.resourceResolveData?.path || resource ) if (!ssrNamedModuleId.startsWith('.')) - ssrNamedModuleId = `./${ssrNamedModuleId}` + // TODO use getModuleId instead + ssrNamedModuleId = `./${ssrNamedModuleId.replace(/\\/g, '/')}` if (isCSSModule) { if (!manifest[resource]) { From b8a20a8d84337e78e0d13422425b260b362fbafd Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Wed, 17 Aug 2022 11:44:18 +0100 Subject: [PATCH 4/7] fix build error --- packages/next/build/webpack/loaders/next-app-loader.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/next/build/webpack/loaders/next-app-loader.ts b/packages/next/build/webpack/loaders/next-app-loader.ts index 8a98b509bd3..3a78b866c63 100644 --- a/packages/next/build/webpack/loaders/next-app-loader.ts +++ b/packages/next/build/webpack/loaders/next-app-loader.ts @@ -26,7 +26,9 @@ async function createTreeCodeFromPath({ if (i === segments.length - 1) { const resolvedPagePath = await resolve(pagePath) // Use '' for segment as it's the page. There can't be a segment called '' so this is the safest way to add it. - tree = `['', {}, {filePath: ${JSON.stringify(resolvedPagePath}, page: () => require(${JSON.stringify(resolvedPagePath})}]` + tree = `['', {}, {filePath: ${JSON.stringify( + resolvedPagePath + )}, page: () => require(${JSON.stringify(resolvedPagePath)}]` continue } From bf3868c90c657ad79f6736739553bc137aa06632 Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Wed, 17 Aug 2022 14:23:01 +0100 Subject: [PATCH 5/7] fix --- .../build/webpack/loaders/next-flight-client-entry-loader.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/next/build/webpack/loaders/next-flight-client-entry-loader.ts b/packages/next/build/webpack/loaders/next-flight-client-entry-loader.ts index f4da428e8f2..7f6ab8d3057 100644 --- a/packages/next/build/webpack/loaders/next-flight-client-entry-loader.ts +++ b/packages/next/build/webpack/loaders/next-flight-client-entry-loader.ts @@ -23,8 +23,8 @@ export default async function transformSource(this: any): Promise { .filter((request) => (isServer ? !request.endsWith('.css') : true)) .map((request) => request.endsWith('.css') - ? `(() => import(/* webpackMode: "lazy" */ ${JSON.stringify(request))` - : `import(/* webpackMode: "eager" */ ${JSON.stringify(request))` + ? `(() => import(/* webpackMode: "lazy" */ ${JSON.stringify(request)}` + : `import(/* webpackMode: "eager" */ ${JSON.stringify(request)}` ) .join(';\n') + ` From daba77f8f6cd1c98b579c5d2199016b6b2cc0bf9 Mon Sep 17 00:00:00 2001 From: Jiachi Liu Date: Wed, 17 Aug 2022 15:06:53 +0100 Subject: [PATCH 6/7] fix missing pair --- packages/next/build/webpack/loaders/next-app-loader.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/next/build/webpack/loaders/next-app-loader.ts b/packages/next/build/webpack/loaders/next-app-loader.ts index 3a78b866c63..d4d0a51b9cd 100644 --- a/packages/next/build/webpack/loaders/next-app-loader.ts +++ b/packages/next/build/webpack/loaders/next-app-loader.ts @@ -28,7 +28,7 @@ async function createTreeCodeFromPath({ // Use '' for segment as it's the page. There can't be a segment called '' so this is the safest way to add it. tree = `['', {}, {filePath: ${JSON.stringify( resolvedPagePath - )}, page: () => require(${JSON.stringify(resolvedPagePath)}]` + )}, page: () => require(${JSON.stringify(resolvedPagePath)})]` continue } From be3cc543ca4915389105409a6456db00682266d7 Mon Sep 17 00:00:00 2001 From: Jiachi Liu Date: Wed, 17 Aug 2022 15:26:40 +0100 Subject: [PATCH 7/7] fix pair --- packages/next/build/webpack/loaders/next-app-loader.ts | 4 ++-- .../webpack/loaders/next-flight-client-entry-loader.ts | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/next/build/webpack/loaders/next-app-loader.ts b/packages/next/build/webpack/loaders/next-app-loader.ts index d4d0a51b9cd..bf7a405e191 100644 --- a/packages/next/build/webpack/loaders/next-app-loader.ts +++ b/packages/next/build/webpack/loaders/next-app-loader.ts @@ -28,7 +28,7 @@ async function createTreeCodeFromPath({ // Use '' for segment as it's the page. There can't be a segment called '' so this is the safest way to add it. tree = `['', {}, {filePath: ${JSON.stringify( resolvedPagePath - )}, page: () => require(${JSON.stringify(resolvedPagePath)})]` + )}, page: () => require(${JSON.stringify(resolvedPagePath)})}]` continue } @@ -49,7 +49,7 @@ async function createTreeCodeFromPath({ children ? `children: ${children},` : '' } }, { - filePath: '${resolvedLayoutPath}', + filePath: '${resolvedLayoutPath}', ${ resolvedLayoutPath ? `layout: () => require(${JSON.stringify(resolvedLayoutPath)}),` diff --git a/packages/next/build/webpack/loaders/next-flight-client-entry-loader.ts b/packages/next/build/webpack/loaders/next-flight-client-entry-loader.ts index 7f6ab8d3057..c2fdce03388 100644 --- a/packages/next/build/webpack/loaders/next-flight-client-entry-loader.ts +++ b/packages/next/build/webpack/loaders/next-flight-client-entry-loader.ts @@ -23,8 +23,10 @@ export default async function transformSource(this: any): Promise { .filter((request) => (isServer ? !request.endsWith('.css') : true)) .map((request) => request.endsWith('.css') - ? `(() => import(/* webpackMode: "lazy" */ ${JSON.stringify(request)}` - : `import(/* webpackMode: "eager" */ ${JSON.stringify(request)}` + ? `(() => import(/* webpackMode: "lazy" */ ${JSON.stringify( + request + )}))` + : `import(/* webpackMode: "eager" */ ${JSON.stringify(request)})` ) .join(';\n') + `