Skip to content

Commit 5c6c8c7

Browse files
committed
include compiler in vue-server-renderer
1 parent 93342d7 commit 5c6c8c7

File tree

8 files changed

+35
-48
lines changed

8 files changed

+35
-48
lines changed

benchmarks/ssr/common.js

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
'use strict'
22

3-
const compiler = require('../../packages/vue-template-compiler')
43
const self = (global || root)
54

65
self.performance = {
@@ -26,7 +25,7 @@ function generateGrid (rowCount, columnCount) {
2625

2726
const gridData = generateGrid(1000, 10)
2827

29-
var gridComponent = {
28+
module.exports = {
3029
template: '<div><h1>{{ Math.random() }}</h1><my-table></my-table></div>',
3130
components: {
3231
myTable: {
@@ -58,23 +57,3 @@ var gridComponent = {
5857
}
5958
}
6059
}
61-
62-
function createCompiledOptions (options) {
63-
const res = compiler.compileToFunctions(options.template, {
64-
preserveWhitespace: false
65-
})
66-
Object.assign(options, res)
67-
delete options.template
68-
if (options.components) {
69-
const keys = Object.keys(options.components)
70-
let total = keys.length
71-
while (total) {
72-
const name = keys[total - 1]
73-
options.components[name] = createCompiledOptions(options.components[name])
74-
total--
75-
}
76-
}
77-
return options
78-
}
79-
80-
module.exports = createCompiledOptions(gridComponent)

build/build.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ var builds = [
7272
{
7373
entry: 'src/entries/web-server-renderer.js',
7474
format: 'cjs',
75-
external: ['stream', 'module', 'vm', 'entities'],
75+
external: ['stream', 'module', 'vm', 'entities', 'de-indent'],
7676
out: 'packages/vue-server-renderer/index.js'
7777
}
7878
]

build/webpack.ssr.dev.config.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ module.exports = {
1313
alias: alias
1414
},
1515
externals: {
16-
'entities': true
16+
'entities': true,
17+
'de-indent': true
1718
},
1819
module: {
1920
noParse: /run-in-vm/,

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"dev:ssr": "webpack --watch --config build/webpack.ssr.dev.config.js",
1616
"dev:compiler": "webpack --watch --config build/webpack.compiler.dev.config.js",
1717
"build": "NODE_ENV=production node build/build.js",
18-
"build:ssr": "npm run build -- vue.common.js,vue-template-compiler,vue-server-renderer",
18+
"build:ssr": "npm run build -- vue.common.js,vue-server-renderer",
1919
"test": "npm run lint && flow check && npm run test:cover && npm run test:e2e -- --env phantomjs && npm run test:ssr",
2020
"test:unit": "NODE_ENV=development karma start build/karma.unit.config.js",
2121
"test:cover": "NODE_ENV=development karma start build/karma.cover.config.js",

packages/vue-server-renderer/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818
"url": "https://github.com/vuejs/vue/issues"
1919
},
2020
"dependencies": {
21-
"entities": "^1.1.1"
21+
"entities": "^1.1.1",
22+
"de-indent": "^1.0.2"
2223
},
2324
"homepage": "https://github.com/vuejs/vue#readme"
2425
}

src/server/render.js

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/* @flow */
22

33
import { encodeHTML } from 'entities'
4+
import { compileToFunctions } from 'web/compiler/index'
45
import { createComponentInstanceForVnode } from 'core/vdom/create-component'
56

67
const normalizeAsync = (cache, method) => {
@@ -14,6 +15,18 @@ const normalizeAsync = (cache, method) => {
1415
}
1516
}
1617

18+
const compilationCache = Object.create(null)
19+
const normalizeRender = vm => {
20+
const { render, template } = vm.$options
21+
if (!render && template) {
22+
const renderFns = (
23+
compilationCache[template] ||
24+
(compilationCache[template] = compileToFunctions(template))
25+
)
26+
Object.assign(vm.$options, renderFns)
27+
}
28+
}
29+
1730
export function createRenderFunction (
1831
modules: Array<Function>,
1932
directives: Object,
@@ -77,9 +90,11 @@ export function createRenderFunction (
7790
}
7891

7992
function renderComponent (node, write, next, isRoot) {
80-
const child = createComponentInstanceForVnode(node)._render()
81-
child.parent = node
82-
renderNode(child, write, next, isRoot)
93+
const child = createComponentInstanceForVnode(node)
94+
normalizeRender(child)
95+
const childNode = child._render()
96+
childNode.parent = node
97+
renderNode(childNode, write, next, isRoot)
8398
}
8499

85100
function renderComponentWithCache (node, write, next, isRoot, cache, key) {
@@ -179,6 +194,7 @@ export function createRenderFunction (
179194
write: (text: string, next: Function) => void,
180195
done: Function
181196
) {
197+
normalizeRender(component)
182198
renderNode(component._render(), write, done, true)
183199
}
184200
}

test/ssr/ssr-stream.spec.js

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
import Vue from '../../dist/vue.common.js'
2-
import { compileToFunctions } from '../../packages/vue-template-compiler'
32
import { createRenderer } from '../../packages/vue-server-renderer'
43
const { renderToStream } = createRenderer()
54

65
describe('SSR: renderToStream', () => {
76
it('should render to a stream', done => {
8-
const stream = renderVmWithOptions({
7+
const stream = renderToStream(new Vue({
98
template: `
109
<div>
1110
<p class="hi">yoyo</p>
@@ -45,7 +44,7 @@ describe('SSR: renderToStream', () => {
4544
}
4645
}
4746
}
48-
})
47+
}))
4948
let res = ''
5049
stream.on('data', chunk => {
5150
res += chunk
@@ -78,10 +77,3 @@ describe('SSR: renderToStream', () => {
7877
stream.on('data', _ => _)
7978
})
8079
})
81-
82-
function renderVmWithOptions (options) {
83-
const res = compileToFunctions(options.template)
84-
Object.assign(options, res)
85-
delete options.template
86-
return renderToStream(new Vue(options))
87-
}

test/ssr/ssr-string.spec.js

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import Vue from '../../dist/vue.common.js'
2-
import { compileToFunctions } from '../../packages/vue-template-compiler'
32
import { createRenderer } from '../../packages/vue-server-renderer'
43
const { renderToString } = createRenderer()
54

@@ -223,11 +222,13 @@ describe('SSR: renderToString', () => {
223222
`,
224223
components: {
225224
testAsync (resolve) {
226-
const options = compileToFunctions(`
227-
<span class="b">
228-
<test-sub-async></test-sub-async>
229-
</span>
230-
`, { preserveWhitespace: false })
225+
const options = {
226+
template: `
227+
<span class="b">
228+
<test-sub-async></test-sub-async>
229+
</span>
230+
`
231+
}
231232

232233
options.components = {
233234
testSubAsync (resolve) {
@@ -475,9 +476,6 @@ describe('SSR: renderToString', () => {
475476
})
476477

477478
function renderVmWithOptions (options, cb) {
478-
const res = compileToFunctions(options.template)
479-
Object.assign(options, res)
480-
delete options.template
481479
renderToString(new Vue(options), (err, res) => {
482480
expect(err).toBeNull()
483481
cb(res)

0 commit comments

Comments
 (0)