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 }