From 562df1f0a3926e712e995e1417bb1e0c02115025 Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Wed, 31 Jul 2024 23:30:53 -0700 Subject: [PATCH] Ensure we match comment minify behavior between terser and swc (#68372) Currently we are only strip all comments properly when `swcMinify: false` is set although the default is to use `swcMinify` which can cause confusion with these two modes not matching comments handling. This updates the default to match comment stripping between the two and also adds an experimental config to allow toggling this regardless of which minifier is being used. x-ref: [slack thread](https://vercel.slack.com/archives/C0676QZBWKS/p1722444791037279) x-ref: NEXT-3642 --- .../terser-webpack-plugin/src/index.ts | 3 +++ .../pages/index.tsx | 7 +++++ .../terser-class-static-blocks.test.ts | 27 ++++++++++++++++++- 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/packages/next/src/build/webpack/plugins/terser-webpack-plugin/src/index.ts b/packages/next/src/build/webpack/plugins/terser-webpack-plugin/src/index.ts index 96f847c2a94c4..771a4fde89e51 100644 --- a/packages/next/src/build/webpack/plugins/terser-webpack-plugin/src/index.ts +++ b/packages/next/src/build/webpack/plugins/terser-webpack-plugin/src/index.ts @@ -157,6 +157,9 @@ export class TerserPlugin { : {}), compress: true, mangle: true, + output: { + comments: false, + }, } ) diff --git a/test/production/terser-class-static-blocks/pages/index.tsx b/test/production/terser-class-static-blocks/pages/index.tsx index 0f01124d81306..19e0183d4c580 100644 --- a/test/production/terser-class-static-blocks/pages/index.tsx +++ b/test/production/terser-class-static-blocks/pages/index.tsx @@ -1,3 +1,10 @@ +/** + * My JSDoc comment that should be minified away + * + * @author Example One + * @author Example Two + * @copyright 2024 Vercel Inc + */ class TestClass { static text = 'hello world' } diff --git a/test/production/terser-class-static-blocks/terser-class-static-blocks.test.ts b/test/production/terser-class-static-blocks/terser-class-static-blocks.test.ts index 473f075cbe2a4..b47c11bbd5c1a 100644 --- a/test/production/terser-class-static-blocks/terser-class-static-blocks.test.ts +++ b/test/production/terser-class-static-blocks/terser-class-static-blocks.test.ts @@ -1,7 +1,9 @@ +import glob from 'glob' import { nextTestSetup } from 'e2e-utils' +import path from 'path' describe('terser-class-static-blocks', () => { - const { next } = nextTestSetup({ + const { next, isNextDeploy } = nextTestSetup({ files: __dirname, nextConfig: { swcMinify: false, @@ -11,4 +13,27 @@ describe('terser-class-static-blocks', () => { const $ = await next.render$('/') expect($('p').text()).toBe('hello world') }) + + if (!isNextDeploy) { + it('should have stripped away all comments', async () => { + const chunksDir = path.join(next.testDir, '.next/static') + const chunks = glob.sync('**/*.js', { + cwd: chunksDir, + }) + + expect(chunks.length).toBeGreaterThan(0) + + await Promise.all( + chunks.map(async (chunk) => { + expect( + await next.readFile(path.join('.next/static', chunk)) + ).not.toContain('/*') + + expect( + await next.readFile(path.join('.next/static', chunk)) + ).not.toContain('My JSDoc comment that') + }) + ) + }) + } })