diff --git a/packages/compiler-sfc/__tests__/parse.spec.ts b/packages/compiler-sfc/__tests__/parse.spec.ts
index 8d1cad1a9c8..9db9bb7f3e6 100644
--- a/packages/compiler-sfc/__tests__/parse.spec.ts
+++ b/packages/compiler-sfc/__tests__/parse.spec.ts
@@ -167,6 +167,28 @@ h1 { color: red }
expect(descriptor.script!.attrs['src']).toBe('com')
})
+ test('ignoreEmpty: false', () => {
+ const { descriptor } = parse(
+ `\n`,
+ {
+ ignoreEmpty: false
+ }
+ )
+ expect(descriptor.script).toBeTruthy()
+ expect(descriptor.script!.loc).toMatchObject({
+ source: '',
+ start: { line: 1, column: 9, offset: 8 },
+ end: { line: 1, column: 9, offset: 8 }
+ })
+
+ expect(descriptor.scriptSetup).toBeTruthy()
+ expect(descriptor.scriptSetup!.loc).toMatchObject({
+ source: '\n',
+ start: { line: 2, column: 15, offset: 32 },
+ end: { line: 3, column: 1, offset: 33 }
+ })
+ })
+
test('nested templates', () => {
const content = `
ok
diff --git a/packages/compiler-sfc/src/parse.ts b/packages/compiler-sfc/src/parse.ts
index 2650d48064b..019851efab3 100644
--- a/packages/compiler-sfc/src/parse.ts
+++ b/packages/compiler-sfc/src/parse.ts
@@ -18,6 +18,7 @@ export interface SFCParseOptions {
sourceMap?: boolean
sourceRoot?: string
pad?: boolean | 'line' | 'space'
+ ignoreEmpty?: boolean
compiler?: TemplateCompiler
}
@@ -104,6 +105,7 @@ export function parse(
filename = 'anonymous.vue',
sourceRoot = '',
pad = false,
+ ignoreEmpty = true,
compiler = CompilerDOM
}: SFCParseOptions = {}
): SFCParseResult {
@@ -163,7 +165,12 @@ export function parse(
return
}
// we only want to keep the nodes that are not empty (when the tag is not a template)
- if (node.tag !== 'template' && isEmpty(node) && !hasSrc(node)) {
+ if (
+ ignoreEmpty &&
+ node.tag !== 'template' &&
+ isEmpty(node) &&
+ !hasSrc(node)
+ ) {
return
}
switch (node.tag) {