From 3e9cbad0ead6ef210bb738833216bde8b555b45f Mon Sep 17 00:00:00 2001 From: Kermit Date: Thu, 24 Jan 2019 12:29:33 +0800 Subject: [PATCH 1/4] add a dev-only warning for inline-template with no children(#9361) --- packages/vue-template-compiler/browser.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/vue-template-compiler/browser.js b/packages/vue-template-compiler/browser.js index 4b240cdd647..c203c88b2ae 100644 --- a/packages/vue-template-compiler/browser.js +++ b/packages/vue-template-compiler/browser.js @@ -4338,7 +4338,9 @@ function genInlineTemplate (el, state) { var ast = el.children[0]; - if (el.children.length !== 1 || ast.type !== 1) { + if (process.env.NODE_ENV !== 'production' && ( + el.children.length !== 1 || ast.type !== 1 + )) { state.warn( 'Inline-template components must have exactly one child element.', { start: el.start } From fc3f8c7a91cd2cdc1df4a899891492985fa29430 Mon Sep 17 00:00:00 2001 From: Kermit Date: Thu, 24 Jan 2019 12:57:30 +0800 Subject: [PATCH 2/4] fix(genInlineTemplate): handle error when children is empty(#9361) --- packages/vue-template-compiler/browser.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/vue-template-compiler/browser.js b/packages/vue-template-compiler/browser.js index c203c88b2ae..c25dd44766f 100644 --- a/packages/vue-template-compiler/browser.js +++ b/packages/vue-template-compiler/browser.js @@ -4338,15 +4338,13 @@ function genInlineTemplate (el, state) { var ast = el.children[0]; - if (process.env.NODE_ENV !== 'production' && ( - el.children.length !== 1 || ast.type !== 1 - )) { + if (el.children.length !== 1 || ast.type !== 1) { state.warn( 'Inline-template components must have exactly one child element.', { start: el.start } ); } - if (ast.type === 1) { + if (ast && ast.type === 1) { var inlineRenderFns = generate(ast, state.options); return ("inlineTemplate:{render:function(){" + (inlineRenderFns.render) + "},staticRenderFns:[" + (inlineRenderFns.staticRenderFns.map(function (code) { return ("function(){" + code + "}"); }).join(',')) + "]}") } From 4b79b63f8348599c1b6ac337656b1de290960144 Mon Sep 17 00:00:00 2001 From: Kermit Date: Thu, 24 Jan 2019 21:50:46 +0800 Subject: [PATCH 3/4] fix(genInlineTemplate): appear error when children is empty(#9361) --- packages/vue-server-renderer/build.dev.js | 2 +- packages/vue-template-compiler/browser.js | 2 +- packages/weex-template-compiler/build.js | 2 +- src/compiler/codegen/index.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/vue-server-renderer/build.dev.js b/packages/vue-server-renderer/build.dev.js index f10ebafc1d2..a569b0765af 100644 --- a/packages/vue-server-renderer/build.dev.js +++ b/packages/vue-server-renderer/build.dev.js @@ -5025,7 +5025,7 @@ function genInlineTemplate (el, state) { { start: el.start } ); } - if (ast.type === 1) { + if (ast && ast.type === 1) { var inlineRenderFns = generate(ast, state.options); return ("inlineTemplate:{render:function(){" + (inlineRenderFns.render) + "},staticRenderFns:[" + (inlineRenderFns.staticRenderFns.map(function (code) { return ("function(){" + code + "}"); }).join(',')) + "]}") } diff --git a/packages/vue-template-compiler/browser.js b/packages/vue-template-compiler/browser.js index 4b240cdd647..c25dd44766f 100644 --- a/packages/vue-template-compiler/browser.js +++ b/packages/vue-template-compiler/browser.js @@ -4344,7 +4344,7 @@ { start: el.start } ); } - if (ast.type === 1) { + if (ast && ast.type === 1) { var inlineRenderFns = generate(ast, state.options); return ("inlineTemplate:{render:function(){" + (inlineRenderFns.render) + "},staticRenderFns:[" + (inlineRenderFns.staticRenderFns.map(function (code) { return ("function(){" + code + "}"); }).join(',')) + "]}") } diff --git a/packages/weex-template-compiler/build.js b/packages/weex-template-compiler/build.js index d6951d52830..c1882aaac5c 100644 --- a/packages/weex-template-compiler/build.js +++ b/packages/weex-template-compiler/build.js @@ -3245,7 +3245,7 @@ function genInlineTemplate (el, state) { )) { state.warn('Inline-template components must have exactly one child element.'); } - if (ast.type === 1) { + if (ast && ast.type === 1) { var inlineRenderFns = generate(ast, state.options); return ("inlineTemplate:{render:function(){" + (inlineRenderFns.render) + "},staticRenderFns:[" + (inlineRenderFns.staticRenderFns.map(function (code) { return ("function(){" + code + "}"); }).join(',')) + "]}") } diff --git a/src/compiler/codegen/index.js b/src/compiler/codegen/index.js index bdd76be0033..0dc6d357fca 100644 --- a/src/compiler/codegen/index.js +++ b/src/compiler/codegen/index.js @@ -340,7 +340,7 @@ function genInlineTemplate (el: ASTElement, state: CodegenState): ?string { { start: el.start } ) } - if (ast.type === 1) { + if (ast && ast.type === 1) { const inlineRenderFns = generate(ast, state.options) return `inlineTemplate:{render:function(){${ inlineRenderFns.render From 0f61572b1daec0d5417d0fc5eceb42e26b5e47c6 Mon Sep 17 00:00:00 2001 From: Kermit Date: Thu, 24 Jan 2019 21:59:54 +0800 Subject: [PATCH 4/4] fix(genInlineTemplate): appear error when children is empty(#9361) --- test/unit/modules/compiler/codegen.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unit/modules/compiler/codegen.spec.js b/test/unit/modules/compiler/codegen.spec.js index 7f5fbeae333..78c10687200 100644 --- a/test/unit/modules/compiler/codegen.spec.js +++ b/test/unit/modules/compiler/codegen.spec.js @@ -587,7 +587,7 @@ describe('codegen', () => { try { assertCodegen( '', - '' + `with(this){return _c('my-component',{})}` ) } catch (e) {} expect('Inline-template components must have exactly one child element.').toHaveBeenWarned()