From ebea295eccf4a39177d73e93bc99f8e61df80acb Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Mon, 22 Jul 2019 20:38:39 +0800 Subject: [PATCH] fix: require parent template after `when` condition evaluated as truthy fixes #4291 --- packages/@vue/cli/lib/GeneratorAPI.js | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/packages/@vue/cli/lib/GeneratorAPI.js b/packages/@vue/cli/lib/GeneratorAPI.js index 1261676d35..6aad56bd00 100644 --- a/packages/@vue/cli/lib/GeneratorAPI.js +++ b/packages/@vue/cli/lib/GeneratorAPI.js @@ -417,6 +417,22 @@ function renderFile (name, data, ejsOptions) { const parsed = yaml.loadFront(template) const content = parsed.__content let finalTemplate = content.trim() + `\n` + + if (parsed.when) { + finalTemplate = ( + `<%_ if (${parsed.when}) { _%>` + + finalTemplate + + `<%_ } _%>` + ) + + // use ejs.render to test the conditional expression + // if evaluated to falsy vaule, return early to avoid extra cost for extend expression + const result = ejs.render(finalTemplate, data, ejsOptions) + if (!result) { + return + } + } + if (parsed.extend) { const extendPath = path.isAbsolute(parsed.extend) ? parsed.extend @@ -437,13 +453,6 @@ function renderFile (name, data, ejsOptions) { finalTemplate = finalTemplate.replace(parsed.replace, content.trim()) } } - if (parsed.when) { - finalTemplate = ( - `<%_ if (${parsed.when}) { _%>` + - finalTemplate + - `<%_ } _%>` - ) - } } return ejs.render(finalTemplate, data, ejsOptions)