From aa498e9138f6499bd76ce172e69662ef1ceea6fe Mon Sep 17 00:00:00 2001 From: HcySunYang Date: Tue, 9 Mar 2021 12:36:08 +0800 Subject: [PATCH 1/5] feat(compiler): take the comments option to fully control whether to keep comment nodes --- packages/compiler-core/__tests__/parse.spec.ts | 12 +++--------- packages/compiler-core/src/parse.ts | 14 +++++++------- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/packages/compiler-core/__tests__/parse.spec.ts b/packages/compiler-core/__tests__/parse.spec.ts index a93b5e0404c..63f97ca9f4c 100644 --- a/packages/compiler-core/__tests__/parse.spec.ts +++ b/packages/compiler-core/__tests__/parse.spec.ts @@ -377,23 +377,17 @@ describe('compiler: parse', () => { }) test('comments option', () => { - __DEV__ = false - const astDefaultComment = baseParse('') - const astNoComment = baseParse('', { comments: false }) const astWithComments = baseParse('', { comments: true }) - __DEV__ = true + const astNoComment = baseParse('', { comments: false }) - expect(astDefaultComment.children).toHaveLength(0) - expect(astNoComment.children).toHaveLength(0) expect(astWithComments.children).toHaveLength(1) + expect(astNoComment.children).toHaveLength(0) }) // #2217 test('comments in the
 tag should be removed in production mode', () => {
-      __DEV__ = false
       const rawText = `

` - const ast = baseParse(`

${rawText}
`) - __DEV__ = true + const ast = baseParse(`
${rawText}
`, { comments: false }) expect((ast.children[0] as ElementNode).children).toMatchObject([ { diff --git a/packages/compiler-core/src/parse.ts b/packages/compiler-core/src/parse.ts index d57ca77a03e..d73da01d27a 100644 --- a/packages/compiler-core/src/parse.ts +++ b/packages/compiler-core/src/parse.ts @@ -59,7 +59,8 @@ export const defaultParserOptions: MergedParserOptions = { decodeEntities: (rawText: string): string => rawText.replace(decodeRE, (_, p1) => decodeMap[p1]), onError: defaultOnError, - comments: false + // only keep comment nodes in DEV by default + comments: __DEV__ } export const enum TextModes { @@ -101,7 +102,10 @@ function createParserContext( const options = extend({}, defaultParserOptions) for (const key in rawOptions) { // @ts-ignore - options[key] = rawOptions[key] || defaultParserOptions[key] + options[key] = + rawOptions[key] === undefined + ? defaultParserOptions[key] + : rawOptions[key] } return { options, @@ -238,11 +242,7 @@ function parseChildren( } } // also remove comment nodes in prod by default - if ( - !__DEV__ && - node.type === NodeTypes.COMMENT && - !context.options.comments - ) { + if (node.type === NodeTypes.COMMENT && !context.options.comments) { removedWhitespace = true nodes[i] = null as any } From 71c878fea42f83011883ad10bf2a1252e15faa18 Mon Sep 17 00:00:00 2001 From: HcySunYang Date: Tue, 9 Mar 2021 12:40:56 +0800 Subject: [PATCH 2/5] chore: fit comments --- packages/compiler-core/src/parse.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/compiler-core/src/parse.ts b/packages/compiler-core/src/parse.ts index d73da01d27a..4fcfb961171 100644 --- a/packages/compiler-core/src/parse.ts +++ b/packages/compiler-core/src/parse.ts @@ -241,7 +241,7 @@ function parseChildren( node.content = node.content.replace(/[\t\r\n\f ]+/g, ' ') } } - // also remove comment nodes in prod by default + // comment nodes handling if (node.type === NodeTypes.COMMENT && !context.options.comments) { removedWhitespace = true nodes[i] = null as any From 8c801f1623eb8b549a1f50229ce945d882e85893 Mon Sep 17 00:00:00 2001 From: HcySunYang Date: Tue, 9 Mar 2021 17:05:53 +0800 Subject: [PATCH 3/5] fix: types --- packages/compiler-core/src/parse.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/compiler-core/src/parse.ts b/packages/compiler-core/src/parse.ts index 4fcfb961171..a76a0cd4c88 100644 --- a/packages/compiler-core/src/parse.ts +++ b/packages/compiler-core/src/parse.ts @@ -100,7 +100,8 @@ function createParserContext( rawOptions: ParserOptions ): ParserContext { const options = extend({}, defaultParserOptions) - for (const key in rawOptions) { + let key: keyof ParserOptions + for (key in rawOptions) { // @ts-ignore options[key] = rawOptions[key] === undefined From 8d68a9e3734d850e4c202f74c40d33cee054f1e4 Mon Sep 17 00:00:00 2001 From: HcySunYang Date: Mon, 22 Mar 2021 10:29:27 +0800 Subject: [PATCH 4/5] chore: adjust the if branch --- packages/compiler-core/src/parse.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/compiler-core/src/parse.ts b/packages/compiler-core/src/parse.ts index a76a0cd4c88..4bcf6c47198 100644 --- a/packages/compiler-core/src/parse.ts +++ b/packages/compiler-core/src/parse.ts @@ -241,9 +241,8 @@ function parseChildren( } else { node.content = node.content.replace(/[\t\r\n\f ]+/g, ' ') } - } - // comment nodes handling - if (node.type === NodeTypes.COMMENT && !context.options.comments) { + } else if (node.type === NodeTypes.COMMENT && !context.options.comments) { + // comment nodes handling removedWhitespace = true nodes[i] = null as any } From f246ea81d70d2a16f2bcd925d6a218cafc28c8f2 Mon Sep 17 00:00:00 2001 From: HcySunYang Date: Sun, 28 Mar 2021 13:36:38 +0800 Subject: [PATCH 5/5] chore: tweak comments --- packages/compiler-core/src/options.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/compiler-core/src/options.ts b/packages/compiler-core/src/options.ts index d8d2573a6e8..2b9f87ca133 100644 --- a/packages/compiler-core/src/options.ts +++ b/packages/compiler-core/src/options.ts @@ -50,7 +50,7 @@ export interface ParserOptions { decodeEntities?: (rawText: string, asAttr: boolean) => string onError?: (error: CompilerError) => void /** - * Keep comments in the templates AST, even in production + * Whether to keep comments in the templates AST */ comments?: boolean }