From 14f33dd54f1fcf003e6d2b1a0d711751985f65cd Mon Sep 17 00:00:00 2001 From: Joe Haddad Date: Mon, 10 Feb 2020 17:43:34 -0500 Subject: [PATCH] Make Missing Prerender Manifest Fatal (#10485) * Fail on Invalid Prerender Manifest * Make Missing Prerender Manifest Fatal * fix test --- packages/next/build/index.ts | 11 ++++++++++ packages/next/next-server/server/spr-cache.ts | 18 +++++++-------- .../integration/error-in-error/pages/index.js | 22 ++++++++++++------- 3 files changed, 33 insertions(+), 18 deletions(-) diff --git a/packages/next/build/index.ts b/packages/next/build/index.ts index 1ae77d74fe3b673..94ce85aed4ac79d 100644 --- a/packages/next/build/index.ts +++ b/packages/next/build/index.ts @@ -801,6 +801,17 @@ export default async function build(dir: string, conf = null): Promise { dynamicRoutes: finalDynamicRoutes, } + await fsWriteFile( + path.join(distDir, PRERENDER_MANIFEST), + JSON.stringify(prerenderManifest), + 'utf8' + ) + } else { + const prerenderManifest: PrerenderManifest = { + version: 1, + routes: {}, + dynamicRoutes: {}, + } await fsWriteFile( path.join(distDir, PRERENDER_MANIFEST), JSON.stringify(prerenderManifest), diff --git a/packages/next/next-server/server/spr-cache.ts b/packages/next/next-server/server/spr-cache.ts index 36ccae2d4fc0e74..cc474a167566d35 100644 --- a/packages/next/next-server/server/spr-cache.ts +++ b/packages/next/next-server/server/spr-cache.ts @@ -1,11 +1,11 @@ import fs from 'fs' -import path from 'path' import LRUCache from 'lru-cache' +import mkdirpOrig from 'mkdirp' +import path from 'path' import { promisify } from 'util' import { PrerenderManifest } from '../../build' import { PRERENDER_MANIFEST } from '../lib/constants' import { normalizePagePath } from './normalize-page-path' -import mkdirpOrig from 'mkdirp' const mkdirp = promisify(mkdirpOrig) const readFile = promisify(fs.readFile) @@ -72,14 +72,12 @@ export function initializeSprCache({ !dev && (typeof flushToDisk !== 'undefined' ? flushToDisk : true), } - try { - prerenderManifest = dev - ? { routes: {}, dynamicRoutes: [] } - : JSON.parse( - fs.readFileSync(path.join(distDir, PRERENDER_MANIFEST), 'utf8') - ) - } catch (_) { - prerenderManifest = { version: 1, routes: {}, dynamicRoutes: {} } + if (dev) { + prerenderManifest = { version: -1, routes: {}, dynamicRoutes: {} } + } else { + prerenderManifest = JSON.parse( + fs.readFileSync(path.join(distDir, PRERENDER_MANIFEST), 'utf8') + ) } cache = new LRUCache({ diff --git a/test/integration/error-in-error/pages/index.js b/test/integration/error-in-error/pages/index.js index f3fd73f974b88ee..598c95376ce38ba 100644 --- a/test/integration/error-in-error/pages/index.js +++ b/test/integration/error-in-error/pages/index.js @@ -1,10 +1,16 @@ import Link from 'next/link' -export default () => ( - <> -

Hi 👋

- - a lnik to no-where - - -) +function Index() { + return ( + <> +

Hi 👋

+ + a link to no-where + + + ) +} + +Index.getInitialProps = () => ({}) + +export default Index