perf(compiler-sfc): ignore empty blocks (#3520)
This commit is contained in:
parent
65f82ce94f
commit
b771fdbef9
@ -135,8 +135,13 @@ h1 { color: red }
|
|||||||
|
|
||||||
test('should ignore other nodes with no content', () => {
|
test('should ignore other nodes with no content', () => {
|
||||||
expect(parse(`<script/>`).descriptor.script).toBe(null)
|
expect(parse(`<script/>`).descriptor.script).toBe(null)
|
||||||
|
expect(parse(`<script> \n\t </script>`).descriptor.script).toBe(null)
|
||||||
expect(parse(`<style/>`).descriptor.styles.length).toBe(0)
|
expect(parse(`<style/>`).descriptor.styles.length).toBe(0)
|
||||||
|
expect(parse(`<style> \n\t </style>`).descriptor.styles.length).toBe(0)
|
||||||
expect(parse(`<custom/>`).descriptor.customBlocks.length).toBe(0)
|
expect(parse(`<custom/>`).descriptor.customBlocks.length).toBe(0)
|
||||||
|
expect(
|
||||||
|
parse(`<custom> \n\t </custom>`).descriptor.customBlocks.length
|
||||||
|
).toBe(0)
|
||||||
})
|
})
|
||||||
|
|
||||||
test('handle empty nodes with src attribute', () => {
|
test('handle empty nodes with src attribute', () => {
|
||||||
|
@ -162,7 +162,8 @@ export function parse(
|
|||||||
if (node.type !== NodeTypes.ELEMENT) {
|
if (node.type !== NodeTypes.ELEMENT) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (!node.children.length && !hasSrc(node) && node.tag !== 'template') {
|
// 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)) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
switch (node.tag) {
|
switch (node.tag) {
|
||||||
@ -415,3 +416,15 @@ function hasSrc(node: ElementNode) {
|
|||||||
return p.name === 'src'
|
return p.name === 'src'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if the node has no children
|
||||||
|
* once the empty text nodes (trimmed content) have been filtered out.
|
||||||
|
*/
|
||||||
|
function isEmpty(node: ElementNode) {
|
||||||
|
return (
|
||||||
|
node.children.filter(
|
||||||
|
child => child.type !== NodeTypes.TEXT || child.content.trim() !== ''
|
||||||
|
).length === 0
|
||||||
|
)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user