diff --git a/packages/compiler-sfc/__tests__/compileTemplate.spec.ts b/packages/compiler-sfc/__tests__/compileTemplate.spec.ts
index 9b57c1230..ca298df47 100644
--- a/packages/compiler-sfc/__tests__/compileTemplate.spec.ts
+++ b/packages/compiler-sfc/__tests__/compileTemplate.spec.ts
@@ -139,7 +139,7 @@ test('should work w/ AST from descriptor', () => {
sourceMap: true
}).descriptor.template!
- expect(template.ast.source).toBe(source)
+ expect(template.ast!.source).toBe(source)
const { code, map } = compile({
filename: 'example.vue',
diff --git a/packages/compiler-sfc/__tests__/parse.spec.ts b/packages/compiler-sfc/__tests__/parse.spec.ts
index 6ae3427c7..7c8efdfc4 100644
--- a/packages/compiler-sfc/__tests__/parse.spec.ts
+++ b/packages/compiler-sfc/__tests__/parse.spec.ts
@@ -164,6 +164,11 @@ h1 { color: red }
expect(descriptor.script!.attrs['src']).toBe('com')
})
+ test('should not expose ast on template node if has src import', () => {
+ const { descriptor } = parse(``)
+ expect(descriptor.template!.ast).toBeUndefined()
+ })
+
test('ignoreEmpty: false', () => {
const { descriptor } = parse(
`\n`,
@@ -211,7 +216,7 @@ h1 { color: red }
expect(errors.length).toBe(0)
expect(descriptor.template!.content).toBe(content)
// should not attempt to parse the content
- expect(descriptor.template!.ast.children.length).toBe(1)
+ expect(descriptor.template!.ast!.children.length).toBe(1)
})
//#2566
diff --git a/packages/compiler-sfc/src/parse.ts b/packages/compiler-sfc/src/parse.ts
index 3330254d2..618ffca2e 100644
--- a/packages/compiler-sfc/src/parse.ts
+++ b/packages/compiler-sfc/src/parse.ts
@@ -38,7 +38,7 @@ export interface SFCBlock {
export interface SFCTemplateBlock extends SFCBlock {
type: 'template'
- ast: RootNode
+ ast?: RootNode
}
export interface SFCScriptBlock extends SFCBlock {
@@ -156,7 +156,10 @@ export function parse(
source,
false
) as SFCTemplateBlock)
- templateBlock.ast = createRoot(node.children, source)
+
+ if (!templateBlock.attrs.src) {
+ templateBlock.ast = createRoot(node.children, source)
+ }
// warn against 2.x
if (templateBlock.attrs.functional) {