diff --git a/src/compiler/compile/render_ssr/handlers/Head.ts b/src/compiler/compile/render_ssr/handlers/Head.ts index f4bb3fa118e7..95648e1acafe 100644 --- a/src/compiler/compile/render_ssr/handlers/Head.ts +++ b/src/compiler/compile/render_ssr/handlers/Head.ts @@ -1,6 +1,7 @@ import Renderer, { RenderOptions } from '../Renderer'; import Head from '../../nodes/Head'; import { x } from 'code-red'; +import { Node } from 'estree'; export default function(node: Head, renderer: Renderer, options: RenderOptions) { const head_options = { @@ -11,6 +12,12 @@ export default function(node: Head, renderer: Renderer, options: RenderOptions) renderer.push(); renderer.render(node.children, head_options); const result = renderer.pop(); + let expression: Node = result; + if (options.hydratable) { + const start_comment = `HEAD_${node.id}_START`; + const end_comment = `HEAD_${node.id}_END`; + expression = x`'' + ${expression} + ''`; + } - renderer.add_expression(x`$$result.head += '' + ${result} + '', ""`); + renderer.add_expression(x`$$result.head += ${expression}, ""`); } diff --git a/test/server-side-rendering/index.ts b/test/server-side-rendering/index.ts index 2a4e0596e751..a5458be10992 100644 --- a/test/server-side-rendering/index.ts +++ b/test/server-side-rendering/index.ts @@ -117,7 +117,9 @@ describe('ssr', () => { fs.writeFileSync(`${dir}/_actual-head.html`, head); try { - assert.htmlEqual( + (compileOptions.hydratable + ? assert.htmlEqualWithComments + : assert.htmlEqual)( head, fs.readFileSync(`${dir}/_expected-head.html`, 'utf-8') ); diff --git a/test/server-side-rendering/samples/head-meta-hydrate-duplicate/_config.js b/test/server-side-rendering/samples/head-meta-hydrate-duplicate/_config.js index ae9b250f8657..f1f4fff92193 100644 --- a/test/server-side-rendering/samples/head-meta-hydrate-duplicate/_config.js +++ b/test/server-side-rendering/samples/head-meta-hydrate-duplicate/_config.js @@ -1,5 +1,6 @@ export default { compileOptions: { hydratable: true - } + }, + withoutNormalizeHtml: true };