Skip to content

Commit

Permalink
Ensure we match comment minify behavior between terser and swc (#68372)
Browse files Browse the repository at this point in the history
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
  • Loading branch information
ijjk authored and lubieowoce committed Aug 22, 2024
1 parent de00222 commit eed3cec
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,9 @@ export class TerserPlugin {
: {}),
compress: true,
mangle: true,
output: {
comments: false,
},
}
)

Expand Down
7 changes: 7 additions & 0 deletions test/production/terser-class-static-blocks/pages/index.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
/**
* My JSDoc comment that should be minified away
*
* @author Example One <example1@example.com>
* @author Example Two <example2@example.com>
* @copyright 2024 Vercel Inc
*/
class TestClass {
static text = 'hello world'
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,38 @@
import { createNextDescribe } from 'e2e-utils'
import glob from 'glob'
import { nextTestSetup } from 'e2e-utils'
import path from 'path'

createNextDescribe(
'terser-class-static-blocks',
{
describe('terser-class-static-blocks', () => {
const { next, isNextDeploy } = nextTestSetup({
files: __dirname,
nextConfig: {
swcMinify: false,
},
},
({ next }) => {
it('should work using cheerio', async () => {
const $ = await next.render$('/')
expect($('p').text()).toBe('hello world')
nextConfig: {},
})

it('should work using cheerio', async () => {
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')
})
)
})
}
)
})

0 comments on commit eed3cec

Please sign in to comment.