From f9f6a3fc0c864e8b2c6f92dd302983a3a880ea9b Mon Sep 17 00:00:00 2001 From: Steven Date: Tue, 20 Dec 2022 14:43:15 -0500 Subject: [PATCH 1/3] Disable Image Optimization API when next.config.js has `unoptimzed: true` --- packages/next/server/next-server.ts | 2 +- .../image-optimizer/test/index.test.ts | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/packages/next/server/next-server.ts b/packages/next/server/next-server.ts index d4189e0c17c7..87125e599f83 100644 --- a/packages/next/server/next-server.ts +++ b/packages/next/server/next-server.ts @@ -407,7 +407,7 @@ export default class NextNodeServer extends BaseServer { } const imagesConfig = this.nextConfig.images - if (imagesConfig.loader !== 'default') { + if (imagesConfig.loader !== 'default' || imagesConfig.unoptimized) { await this.render404(req, res) return { finished: true } } diff --git a/test/integration/image-optimizer/test/index.test.ts b/test/integration/image-optimizer/test/index.test.ts index cc31e3e7433b..a238ea0f06d8 100644 --- a/test/integration/image-optimizer/test/index.test.ts +++ b/test/integration/image-optimizer/test/index.test.ts @@ -558,6 +558,36 @@ describe('Image Optimizer', () => { }) }) + describe('images.unoptimized in next.config.js', () => { + let app + let appPort + + beforeAll(async () => { + nextConfig.replace( + '{ /* replaceme */ }', + JSON.stringify({ + images: { + unoptimized: true, + }, + }) + ) + await cleanImagesDir({ imagesDir }) + appPort = await findPort() + app = await launchApp(appDir, appPort) + }) + afterAll(async () => { + await killApp(app) + nextConfig.restore() + }) + it('should 404 when unoptimized', async () => { + const size = 384 // defaults defined in server/config.ts + const query = { w: size, q: 75, url: '/test.jpg' } + const opts = { headers: { accept: 'image/webp' } } + const res = await fetchViaHTTP(appPort, '/_next/image', query, opts) + expect(res.status).toBe(404) + }) + }) + describe('External rewrite support with for serving static content in images', () => { let app let appPort From 7538593d86daa49c3016594491780e788cbd8cee Mon Sep 17 00:00:00 2001 From: Steven Date: Tue, 20 Dec 2022 14:49:40 -0500 Subject: [PATCH 2/3] Skip writing the file --- packages/next/build/index.ts | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/packages/next/build/index.ts b/packages/next/build/index.ts index b67e9ad45615..25de6d2be77d 100644 --- a/packages/next/build/index.ts +++ b/packages/next/build/index.ts @@ -2726,14 +2726,20 @@ export default async function build( pathname: makeRe(p.pathname ?? '**').source, })) - await promises.writeFile( - path.join(distDir, IMAGES_MANIFEST), - JSON.stringify({ - version: 1, - images, - }), - 'utf8' - ) + if (images.unoptimized) { + // Skip writing the images manifest file + // so that any downstream consumer will know + // to disable the Image Optimization API + } else { + await promises.writeFile( + path.join(distDir, IMAGES_MANIFEST), + JSON.stringify({ + version: 1, + images, + }), + 'utf8' + ) + } await promises.writeFile( path.join(distDir, EXPORT_MARKER), JSON.stringify({ From 06cc274a509bca2d83a6fdd0011bf3a011f09c94 Mon Sep 17 00:00:00 2001 From: Steven Date: Tue, 20 Dec 2022 16:52:25 -0500 Subject: [PATCH 3/3] revert images manifest --- packages/next/build/index.ts | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/packages/next/build/index.ts b/packages/next/build/index.ts index 25de6d2be77d..b67e9ad45615 100644 --- a/packages/next/build/index.ts +++ b/packages/next/build/index.ts @@ -2726,20 +2726,14 @@ export default async function build( pathname: makeRe(p.pathname ?? '**').source, })) - if (images.unoptimized) { - // Skip writing the images manifest file - // so that any downstream consumer will know - // to disable the Image Optimization API - } else { - await promises.writeFile( - path.join(distDir, IMAGES_MANIFEST), - JSON.stringify({ - version: 1, - images, - }), - 'utf8' - ) - } + await promises.writeFile( + path.join(distDir, IMAGES_MANIFEST), + JSON.stringify({ + version: 1, + images, + }), + 'utf8' + ) await promises.writeFile( path.join(distDir, EXPORT_MARKER), JSON.stringify({