Skip to content

Commit 4e586c0

Browse files
committed
fix: require parent template after when condition evaluated as truthy (#4330)
fixes #4291 (cherry picked from commit a1c88ed)
1 parent c9d5c6f commit 4e586c0

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
@@ -400,6 +400,22 @@ function renderFile (name, data, ejsOptions) {
400400
const parsed = yaml.loadFront(template)
401401
const content = parsed.__content
402402
let finalTemplate = content.trim() + `\n`
403+
404+
if (parsed.when) {
405+
finalTemplate = (
406+
`<%_ if (${parsed.when}) { _%>` +
407+
finalTemplate +
408+
`<%_ } _%>`
409+
)
410+
411+
// use ejs.render to test the conditional expression
412+
// if evaluated to falsy vaule, return early to avoid extra cost for extend expression
413+
const result = ejs.render(finalTemplate, data, ejsOptions)
414+
if (!result) {
415+
return
416+
}
417+
}
418+
403419
if (parsed.extend) {
404420
const extendPath = path.isAbsolute(parsed.extend)
405421
? parsed.extend
@@ -420,13 +436,6 @@ function renderFile (name, data, ejsOptions) {
420436
finalTemplate = finalTemplate.replace(parsed.replace, content.trim())
421437
}
422438
}
423-
if (parsed.when) {
424-
finalTemplate = (
425-
`<%_ if (${parsed.when}) { _%>` +
426-
finalTemplate +
427-
`<%_ } _%>`
428-
)
429-
}
430439
}
431440

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

0 commit comments

Comments
 (0)