From a18110c0ec1ff42807659eec0841c7b62792f290 Mon Sep 17 00:00:00 2001 From: Jimmy Lai Date: Sun, 16 Apr 2023 10:33:02 +0200 Subject: [PATCH 1/2] use private resolver for default page --- .../build/webpack/loaders/next-app-loader.ts | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/packages/next/src/build/webpack/loaders/next-app-loader.ts b/packages/next/src/build/webpack/loaders/next-app-loader.ts index 85e0cc2c2a13a..01f275e5f92c5 100644 --- a/packages/next/src/build/webpack/loaders/next-app-loader.ts +++ b/packages/next/src/build/webpack/loaders/next-app-loader.ts @@ -51,7 +51,8 @@ const PAGE_SEGMENT = 'page$' type PathResolver = ( pathname: string, - resolveDir?: boolean + resolveDir?: boolean, + internal?: boolean ) => Promise export type ComponentsType = { @@ -171,10 +172,7 @@ async function createTreeCodeFromPath( loaderContext, pageExtensions, }: { - resolver: ( - pathname: string, - resolveDir?: boolean - ) => Promise + resolver: PathResolver resolvePath: (pathname: string) => Promise resolveParallelSegments: ( pathname: string @@ -365,7 +363,11 @@ async function createTreeCodeFromPath( (await resolver( `${appDirPrefix}${segmentPath}/${actualSegment}/default` )) ?? - (await resolver(`next/dist/client/components/parallel-route-default`)) + (await resolver( + `next/dist/client/components/parallel-route-default`, + false, + true + )) props[normalizeParallelKey(adjacentParallelSegment)] = `[ '__DEFAULT__', @@ -437,6 +439,13 @@ const nextAppLoader: AppLoader = async function nextAppLoader() { const resolve = this.getResolve(resolveOptions) + // a resolver for internal next files. We need to override the extensions, in case + // a project doesn't have the same ones as used by next. + const internalResolve = this.getResolve({ + ...resolveOptions, + extensions: [...extensions, '.js', '.jsx', '.ts', '.tsx'], + }) + const normalizedAppPaths = typeof appPaths === 'string' ? [appPaths] : appPaths || [] @@ -471,13 +480,16 @@ const nextAppLoader: AppLoader = async function nextAppLoader() { return Object.entries(matched) } - const resolver: PathResolver = async (pathname, resolveDir) => { + const resolver: PathResolver = async (pathname, resolveDir, internal) => { if (resolveDir) { return createAbsolutePath(appDir, pathname) } try { - const resolved = await resolve(this.rootContext, pathname) + const resolved = await (internal ? internalResolve : resolve)( + this.rootContext, + pathname + ) this.addDependency(resolved) return resolved } catch (err: any) { From b21bd72b06694b9895573df68cf047ce629f7a75 Mon Sep 17 00:00:00 2001 From: Jimmy Lai Date: Sun, 16 Apr 2023 10:44:47 +0200 Subject: [PATCH 2/2] add test --- test/e2e/app-dir/parallel-routes-not-found/next.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/test/e2e/app-dir/parallel-routes-not-found/next.config.js b/test/e2e/app-dir/parallel-routes-not-found/next.config.js index bf49894afd400..358812ac96e49 100644 --- a/test/e2e/app-dir/parallel-routes-not-found/next.config.js +++ b/test/e2e/app-dir/parallel-routes-not-found/next.config.js @@ -2,6 +2,7 @@ * @type {import('next').NextConfig} */ const nextConfig = { + pageExtensions: ['tsx', 'ts'], experimental: { appDir: true }, }