Skip to content

Commit a1c88ed

Browse files
authored
fix: require parent template after when condition evaluated as truthy (#4330)
fixes #4291
1 parent 6207dd9 commit a1c88ed

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

packages/@vue/cli/lib/GeneratorAPI.js

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,22 @@ function renderFile (name, data, ejsOptions) {
417417
const parsed = yaml.loadFront(template)
418418
const content = parsed.__content
419419
let finalTemplate = content.trim() + `\n`
420+
421+
if (parsed.when) {
422+
finalTemplate = (
423+
`<%_ if (${parsed.when}) { _%>` +
424+
finalTemplate +
425+
`<%_ } _%>`
426+
)
427+
428+
// use ejs.render to test the conditional expression
429+
// if evaluated to falsy vaule, return early to avoid extra cost for extend expression
430+
const result = ejs.render(finalTemplate, data, ejsOptions)
431+
if (!result) {
432+
return
433+
}
434+
}
435+
420436
if (parsed.extend) {
421437
const extendPath = path.isAbsolute(parsed.extend)
422438
? parsed.extend
@@ -437,13 +453,6 @@ function renderFile (name, data, ejsOptions) {
437453
finalTemplate = finalTemplate.replace(parsed.replace, content.trim())
438454
}
439455
}
440-
if (parsed.when) {
441-
finalTemplate = (
442-
`<%_ if (${parsed.when}) { _%>` +
443-
finalTemplate +
444-
`<%_ } _%>`
445-
)
446-
}
447456
}
448457

449458
return ejs.render(finalTemplate, data, ejsOptions)

0 commit comments

Comments
 (0)