diff --git a/packages/next/export/worker.ts b/packages/next/export/worker.ts index d3b864290aa2..9ee4a4d7f62c 100644 --- a/packages/next/export/worker.ts +++ b/packages/next/export/worker.ts @@ -328,18 +328,16 @@ export default async function exportPage({ const revalidate = (curRenderOpts as any).revalidate results.fromBuildExportRevalidate = revalidate - if (isDynamicError) { - throw new Error( - `Page with dynamic = "error" encountered dynamic data method ${path}.` - ) - } - if (revalidate !== 0) { await promises.writeFile(htmlFilepath, html ?? '', 'utf8') await promises.writeFile( htmlFilepath.replace(/\.html$/, '.rsc'), flightData ) + } else if (isDynamicError) { + throw new Error( + `Page with dynamic = "error" encountered dynamic data method ${path}.` + ) } } catch (err: any) { if ( diff --git a/test/e2e/app-dir/app-static.test.ts b/test/e2e/app-dir/app-static.test.ts index 394d9d2eeca8..4fb6309d9066 100644 --- a/test/e2e/app-dir/app-static.test.ts +++ b/test/e2e/app-dir/app-static.test.ts @@ -51,6 +51,9 @@ describe('app-dir static/dynamic handling', () => { 'blog/tim.rsc', 'blog/tim/first-post.html', 'blog/tim/first-post.rsc', + 'dynamic-error.html', + 'dynamic-error.rsc', + 'dynamic-error/page.js', 'dynamic-no-gen-params-ssr/[slug]/page.js', 'dynamic-no-gen-params/[slug]/page.js', 'force-static/[slug]/page.js', @@ -107,6 +110,11 @@ describe('app-dir static/dynamic handling', () => { srcRoute: '/blog/[author]/[slug]', dataRoute: '/blog/tim/first-post.rsc', }, + '/dynamic-error': { + dataRoute: '/dynamic-error.rsc', + initialRevalidateSeconds: false, + srcRoute: '/dynamic-error', + }, '/blog/seb/second-post': { initialRevalidateSeconds: false, srcRoute: '/blog/[author]/[slug]', diff --git a/test/e2e/app-dir/app-static/app/dynamic-error/page.js b/test/e2e/app-dir/app-static/app/dynamic-error/page.js new file mode 100644 index 000000000000..a7f6beedf90d --- /dev/null +++ b/test/e2e/app-dir/app-static/app/dynamic-error/page.js @@ -0,0 +1,5 @@ +export const dynamic = 'error' + +export default function Page() { + return

Dynamic error

+}