diff --git a/packages/next/build/entries.ts b/packages/next/build/entries.ts index 5eb9eb4d2ed9..e12ded708cb8 100644 --- a/packages/next/build/entries.ts +++ b/packages/next/build/entries.ts @@ -79,7 +79,7 @@ export function createPagesMapping( // allow falling back to the correct source file so // that HMR can work properly when a file is added/removed const documentPage = `_document${hasConcurrentFeatures ? '-web' : ''}` - const appPage = `_app${hasServerComponents ? '.server' : ''}` + const appPage = `_app${hasServerComponents ? '-server' : ''}` if (isDev) { pages['/_app'] = `${PAGES_DIR_ALIAS}/_app` pages['/_error'] = `${PAGES_DIR_ALIAS}/_error` diff --git a/packages/next/build/webpack-config.ts b/packages/next/build/webpack-config.ts index ffab7fb82561..11da4d6dd255 100644 --- a/packages/next/build/webpack-config.ts +++ b/packages/next/build/webpack-config.ts @@ -546,7 +546,7 @@ export default async function getBaseWebpackConfig( prev.push(path.join(pagesDir, `_app.${ext}`)) return prev }, [] as string[]), - `next/dist/pages/_app${hasServerComponents ? '.server' : ''}.js`, + `next/dist/pages/_app${hasServerComponents ? '-server' : ''}.js`, ] customAppAliases[`${PAGES_DIR_ALIAS}/_error`] = [ ...config.pageExtensions.reduce((prev, ext) => { diff --git a/packages/next/client/index.tsx b/packages/next/client/index.tsx index 924cd9cf54c7..f560531d266c 100644 --- a/packages/next/client/index.tsx +++ b/packages/next/client/index.tsx @@ -657,12 +657,7 @@ const wrapApp = err: hydrateErr, router, } - return ( - - {renderApp(App, appProps)} - {/* */} - - ) + return {renderApp(App, appProps)} } let RSCComponent: (props: any) => JSX.Element @@ -977,7 +972,6 @@ function doRender(input: RenderRouteInfo): Promise { <> - {/* */} {renderApp(App, appProps)} diff --git a/packages/next/pages/_app.server.tsx b/packages/next/pages/_app-server.tsx similarity index 73% rename from packages/next/pages/_app.server.tsx rename to packages/next/pages/_app-server.tsx index ab00268d6b6c..a06d1c991894 100644 --- a/packages/next/pages/_app.server.tsx +++ b/packages/next/pages/_app-server.tsx @@ -1,3 +1,5 @@ +// Default _app page for server components + import React from 'react' export default function App({ children }: { children: React.ReactNode }) { diff --git a/packages/next/server/base-server.ts b/packages/next/server/base-server.ts index e3d8971ed295..e0feebf06e5b 100644 --- a/packages/next/server/base-server.ts +++ b/packages/next/server/base-server.ts @@ -1220,7 +1220,6 @@ export default abstract class Server { parsed: parsed, }) } catch (err) { - console.error('err', err) if (isError(err) && err.code === 'ENOENT') { await this.render404(req, res, parsed) return { finished: true } @@ -1404,7 +1403,6 @@ export default abstract class Server { finished: true, } } catch (err) { - console.error('n err', err) if (err instanceof NoFallbackError && bubbleNoFallback) { return { finished: false, diff --git a/packages/next/server/dev/next-dev-server.ts b/packages/next/server/dev/next-dev-server.ts index 3b5d5659335d..2b1f95c9517e 100644 --- a/packages/next/server/dev/next-dev-server.ts +++ b/packages/next/server/dev/next-dev-server.ts @@ -405,15 +405,11 @@ export default class DevServer extends Server { process.on('unhandledRejection', (reason) => { this.logErrorWithOriginalStack(reason, 'unhandledRejection').catch( - (err) => { - console.error(err) - } + () => {} ) }) process.on('uncaughtException', (err) => { - this.logErrorWithOriginalStack(err, 'uncaughtException').catch((e) => { - console.error(e) - }) + this.logErrorWithOriginalStack(err, 'uncaughtException').catch(() => {}) }) } @@ -671,7 +667,6 @@ export default class DevServer extends Server { } } - console.error(err) if (!usedOriginalStack) { if (type === 'warning') { Log.warn(err + '') diff --git a/packages/next/taskfile.js b/packages/next/taskfile.js index caae935c10a6..4d4a09b11e7e 100644 --- a/packages/next/taskfile.js +++ b/packages/next/taskfile.js @@ -1653,7 +1653,7 @@ export async function pages_app(task, opts) { export async function pages_app_server(task, opts) { await task - .source('pages/_app.server.tsx') + .source('pages/_app-server.tsx') .swc('client', { dev: opts.dev }) .target('dist/pages') } diff --git a/test/integration/react-streaming-and-server-components/app/components/container.client.js b/test/integration/react-streaming-and-server-components/app/components/container.client.js new file mode 100644 index 000000000000..e75ce0e55acb --- /dev/null +++ b/test/integration/react-streaming-and-server-components/app/components/container.client.js @@ -0,0 +1,3 @@ +export default function Container({ children }) { + return
{children}
+} diff --git a/test/integration/react-streaming-and-server-components/test/index.test.js b/test/integration/react-streaming-and-server-components/test/index.test.js index 2f28fcec96ee..3b7176ec4c31 100644 --- a/test/integration/react-streaming-and-server-components/test/index.test.js +++ b/test/integration/react-streaming-and-server-components/test/index.test.js @@ -47,6 +47,13 @@ Document.getInitialProps = (ctx) => { } ` +const rscAppPage = ` +import Container from '../components/container.client' +export default function App({children}) { + return {children} +} +` + const appWithGlobalCss = ` import '../styles.css' @@ -175,6 +182,20 @@ describe('concurrentFeatures - prod', () => { runBasicTests(context, 'prod') }) +const customAppPageSuite = { + runTests: (context) => { + it('should render app page', async () => { + const html = await renderViaHTTP(context.appPort, '/') + expect(html).toContain('_app.server') + }) + }, + before: () => appPage.write(rscAppPage), + after: () => appPage.delete(), +} + +runSuite('Custom App', 'dev', customAppPageSuite) +runSuite('Custom App', 'prod', customAppPageSuite) + describe('concurrentFeatures - dev', () => { const context = { appDir }