Skip to content

Commit a855dd0

Browse files
committed
add environment-agnostic build for vue-server-renderer
1 parent 0a3f831 commit a855dd0

File tree

8 files changed

+174
-11
lines changed

8 files changed

+174
-11
lines changed

Diff for: build/config.js

+11-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
const path = require('path')
22
const buble = require('rollup-plugin-buble')
33
const alias = require('rollup-plugin-alias')
4+
const cjs = require('rollup-plugin-commonjs')
45
const replace = require('rollup-plugin-replace')
6+
const node = require('rollup-plugin-node-resolve')
57
const flow = require('rollup-plugin-flow-no-whitespace')
68
const version = process.env.VERSION || require('../package.json').version
79
const weexVersion = process.env.WEEX_VERSION || require('../packages/weex-vue-framework/package.json').version
@@ -112,6 +114,14 @@ const builds = {
112114
format: 'cjs',
113115
external: Object.keys(require('../packages/vue-server-renderer/package.json').dependencies)
114116
},
117+
'web-server-basic-renderer': {
118+
entry: resolve('web/entry-server-basic-renderer.js'),
119+
dest: resolve('packages/vue-server-renderer/basic.js'),
120+
format: 'umd',
121+
env: 'development',
122+
moduleName: 'renderVueComponentToString',
123+
plugins: [node(), cjs()]
124+
},
115125
'web-server-renderer-webpack-server-plugin': {
116126
entry: resolve('server/webpack-plugin/server.js'),
117127
dest: resolve('packages/vue-server-renderer/server-plugin.js'),
@@ -156,7 +166,7 @@ function genConfig (opts) {
156166
external: opts.external,
157167
format: opts.format,
158168
banner: opts.banner,
159-
moduleName: 'Vue',
169+
moduleName: opts.moduleName || 'Vue',
160170
plugins: [
161171
replace({
162172
__WEEX__: !!opts.weex,

Diff for: package.json

+2
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,9 @@
105105
"rollup-plugin-alias": "^1.2.0",
106106
"rollup-plugin-babel": "^2.4.0",
107107
"rollup-plugin-buble": "^0.15.0",
108+
"rollup-plugin-commonjs": "^8.0.2",
108109
"rollup-plugin-flow-no-whitespace": "^1.0.0",
110+
"rollup-plugin-node-resolve": "^3.0.0",
109111
"rollup-plugin-replace": "^1.1.0",
110112
"rollup-watch": "^3.2.2",
111113
"selenium-server": "^2.53.1",

Diff for: src/compiler/parser/entity-decoder.js

+6-4
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
let decoder
44

5-
export function decode (html: string): string {
6-
decoder = decoder || document.createElement('div')
7-
decoder.innerHTML = html
8-
return decoder.textContent
5+
export default {
6+
decode (html: string): string {
7+
decoder = decoder || document.createElement('div')
8+
decoder.innerHTML = html
9+
return decoder.textContent
10+
}
911
}

Diff for: src/compiler/parser/index.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* @flow */
22

3-
import { decode } from 'he'
3+
import he from 'he'
44
import { parseHTML } from './html-parser'
55
import { parseText } from './text-parser'
66
import { parseFilters } from './filter-parser'
@@ -28,7 +28,7 @@ const argRE = /:(.*)$/
2828
const bindRE = /^:|^v-bind:/
2929
const modifierRE = /\.[^.]+/g
3030

31-
const decodeHTMLCached = cached(decode)
31+
const decodeHTMLCached = cached(he.decode)
3232

3333
// configurable state
3434
export let warn

Diff for: src/platforms/web/entry-server-basic-renderer.js

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/* @flow */
2+
3+
import modules from './server/modules/index'
4+
import directives from './server/directives/index'
5+
import { isUnaryTag, canBeLeftOpenTag } from './compiler/util'
6+
import { createBasicRenderer } from 'server/create-basic-renderer'
7+
8+
export default createBasicRenderer({
9+
modules,
10+
directives,
11+
isUnaryTag,
12+
canBeLeftOpenTag
13+
})

Diff for: src/server/create-basic-renderer.js

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/* @flow */
2+
3+
import { createWriteFunction } from './write'
4+
import { createRenderFunction } from './render'
5+
import type { RenderOptions } from './create-renderer'
6+
7+
export function createBasicRenderer ({
8+
modules = [],
9+
directives = {},
10+
isUnaryTag = (() => false),
11+
cache
12+
}: RenderOptions = {}) {
13+
const render = createRenderFunction(modules, directives, isUnaryTag, cache)
14+
15+
return function renderToString (
16+
component: Component,
17+
context: any,
18+
done: any
19+
): void {
20+
if (typeof context === 'function') {
21+
done = context
22+
context = {}
23+
}
24+
let result = ''
25+
const write = createWriteFunction(text => {
26+
result += text
27+
return false
28+
}, done)
29+
try {
30+
render(component, write, context, () => {
31+
done(null, result)
32+
})
33+
} catch (e) {
34+
done(e)
35+
}
36+
}
37+
}

Diff for: test/ssr/ssr-basic-renderer.spec.js

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import Vue from '../../dist/vue.runtime.common.js'
2+
import renderToString from '../../packages/vue-server-renderer/basic'
3+
4+
describe('SSR: basicRenderer', () => {
5+
it('should work', done => {
6+
renderToString(new Vue({
7+
template: `
8+
<div>
9+
<p class="hi">yoyo</p>
10+
<div id="ho" :class="{ red: isRed }"></div>
11+
<span>{{ test }}</span>
12+
<input :value="test">
13+
<img :src="imageUrl">
14+
<test></test>
15+
<test-async></test-async>
16+
</div>
17+
`,
18+
data: {
19+
test: 'hi',
20+
isRed: true,
21+
imageUrl: 'https://vuejs.org/images/logo.png'
22+
},
23+
components: {
24+
test: {
25+
render () {
26+
return this.$createElement('div', { class: ['a'] }, 'test')
27+
}
28+
},
29+
testAsync (resolve) {
30+
resolve({
31+
render () {
32+
return this.$createElement('span', { class: ['b'] }, 'testAsync')
33+
}
34+
})
35+
}
36+
}
37+
}), (err, result) => {
38+
expect(err).toBeNull()
39+
expect(result).toContain(
40+
'<div data-server-rendered="true">' +
41+
'<p class="hi">yoyo</p> ' +
42+
'<div id="ho" class="red"></div> ' +
43+
'<span>hi</span> ' +
44+
'<input value="hi"> ' +
45+
'<img src="https://vuejs.org/images/logo.png"> ' +
46+
'<div class="a">test</div> ' +
47+
'<span class="b">testAsync</span>' +
48+
'</div>'
49+
)
50+
done()
51+
})
52+
})
53+
})

Diff for: yarn.lock

+50-4
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ acorn@^3.0.4, acorn@^3.1.0, acorn@^3.3.0:
3535
version "3.3.0"
3636
resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
3737

38-
acorn@^4.0.3:
38+
acorn@^4.0.1, acorn@^4.0.3:
3939
version "4.0.13"
4040
resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
4141

@@ -890,6 +890,12 @@ brorand@^1.0.1:
890890
version "1.1.0"
891891
resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
892892

893+
browser-resolve@^1.11.0:
894+
version "1.11.2"
895+
resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce"
896+
dependencies:
897+
resolve "1.1.7"
898+
893899
894900
version "1.3.0"
895901
resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f"
@@ -977,7 +983,7 @@ buffer@^4.3.0:
977983
ieee754 "^1.1.4"
978984
isarray "^1.0.0"
979985

980-
builtin-modules@^1.0.0:
986+
builtin-modules@^1.0.0, builtin-modules@^1.1.0:
981987
version "1.1.1"
982988
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
983989

@@ -1920,6 +1926,10 @@ estree-walker@^0.2.1:
19201926
version "0.2.1"
19211927
resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.2.1.tgz#bdafe8095383d8414d5dc2ecf4c9173b6db9412e"
19221928

1929+
estree-walker@^0.3.0:
1930+
version "0.3.1"
1931+
resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.3.1.tgz#e6b1a51cf7292524e7237c312e5fe6660c1ce1aa"
1932+
19231933
esutils@^2.0.2:
19241934
version "2.0.2"
19251935
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
@@ -2654,6 +2664,10 @@ is-glob@^2.0.0, is-glob@^2.0.1:
26542664
dependencies:
26552665
is-extglob "^1.0.0"
26562666

2667+
is-module@^1.0.0:
2668+
version "1.0.0"
2669+
resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591"
2670+
26572671
is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4:
26582672
version "2.16.0"
26592673
resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693"
@@ -3266,6 +3280,12 @@ magic-string@^0.16.0:
32663280
dependencies:
32673281
vlq "^0.2.1"
32683282

3283+
magic-string@^0.19.0:
3284+
version "0.19.1"
3285+
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.19.1.tgz#14d768013caf2ec8fdea16a49af82fc377e75201"
3286+
dependencies:
3287+
vlq "^0.2.1"
3288+
32693289
map-obj@^1.0.0, map-obj@^1.0.1:
32703290
version "1.0.1"
32713291
resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
@@ -4245,11 +4265,11 @@ resolve-from@^1.0.0:
42454265
version "1.0.1"
42464266
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
42474267

4248-
4268+
42494269
version "1.1.7"
42504270
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
42514271

4252-
resolve@^1.1.6, resolve@^1.2.0:
4272+
resolve@^1.1.6, resolve@^1.1.7, resolve@^1.2.0:
42534273
version "1.3.3"
42544274
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5"
42554275
dependencies:
@@ -4315,13 +4335,32 @@ rollup-plugin-buble@^0.15.0:
43154335
buble "^0.15.0"
43164336
rollup-pluginutils "^1.5.0"
43174337

4338+
rollup-plugin-commonjs@^8.0.2:
4339+
version "8.0.2"
4340+
resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-8.0.2.tgz#98b1589bfe32a6c0f67790b60c0b499972afed89"
4341+
dependencies:
4342+
acorn "^4.0.1"
4343+
estree-walker "^0.3.0"
4344+
magic-string "^0.19.0"
4345+
resolve "^1.1.7"
4346+
rollup-pluginutils "^2.0.1"
4347+
43184348
rollup-plugin-flow-no-whitespace@^1.0.0:
43194349
version "1.0.0"
43204350
resolved "https://registry.yarnpkg.com/rollup-plugin-flow-no-whitespace/-/rollup-plugin-flow-no-whitespace-1.0.0.tgz#bd4ba1bcd99ad5b88234d72e6e2dacea9aa02d16"
43214351
dependencies:
43224352
flow-remove-types-no-whitespace "^1.0.3"
43234353
rollup-pluginutils "^1.5.2"
43244354

4355+
rollup-plugin-node-resolve@^3.0.0:
4356+
version "3.0.0"
4357+
resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.0.0.tgz#8b897c4c3030d5001277b0514b25d2ca09683ee0"
4358+
dependencies:
4359+
browser-resolve "^1.11.0"
4360+
builtin-modules "^1.1.0"
4361+
is-module "^1.0.0"
4362+
resolve "^1.1.6"
4363+
43254364
rollup-plugin-replace@^1.1.0:
43264365
version "1.1.1"
43274366
resolved "https://registry.yarnpkg.com/rollup-plugin-replace/-/rollup-plugin-replace-1.1.1.tgz#396315ded050a6ce43b9518a886a3f60efb1ea33"
@@ -4337,6 +4376,13 @@ rollup-pluginutils@^1.5.0, rollup-pluginutils@^1.5.2:
43374376
estree-walker "^0.2.1"
43384377
minimatch "^3.0.2"
43394378

4379+
rollup-pluginutils@^2.0.1:
4380+
version "2.0.1"
4381+
resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.0.1.tgz#7ec95b3573f6543a46a6461bd9a7c544525d0fc0"
4382+
dependencies:
4383+
estree-walker "^0.3.0"
4384+
micromatch "^2.3.11"
4385+
43404386
rollup-watch@^3.2.2:
43414387
version "3.2.2"
43424388
resolved "https://registry.yarnpkg.com/rollup-watch/-/rollup-watch-3.2.2.tgz#5e574232e9ef36da9177f46946d8080cb267354b"

0 commit comments

Comments
 (0)