@@ -30,42 +30,42 @@ const renderer = createBundleRenderer(serverBundle, { ... })
30
30
31
31
- #### ` renderer.renderToString(vm[, context], callback) `
32
32
33
- 将 Vue 实例渲染为字符串。上下文对象(context object)可选。回调函数是典型的 Node.js 风格回调,其中第一个参数是 error,第二个参数是渲染的字符串 。
33
+ 将 Vue 实例渲染为字符串。上下文对象 (context object) 可选。回调函数是典型的 Node.js 风格回调,其中第一个参数是可能抛出的错误,第二个参数是渲染完毕的字符串 。
34
34
35
35
- #### ` renderer.renderToStream(vm[, context]) `
36
36
37
- 将 Vue 示例渲染为 Node.js 流(stream)。上下文对象(context object)可选。更多细节请查看[ 流式渲染] ( ./streaming.md ) 。
37
+ 将 Vue 实例渲染为一个 Node.js 流 (stream)。上下文对象 (context object) 可选。更多细节请查看[ 流式渲染] ( ./streaming.md ) 。
38
38
39
39
## ` Class: BundleRenderer `
40
40
41
41
- #### ` bundleRenderer.renderToString([context, ]callback) `
42
42
43
- 将 bundle 渲染为字符串。上下文对象(context object)可选。回调是一个典型的Node.js样式回调,其中第一个参数是错误,第二个参数是呈现的字符串 。
43
+ 将 bundle 渲染为字符串。上下文对象 (context object) 可选。回调是一个典型的 Node.js 风格回调,其中第一个参数是可能抛出的错误,第二个参数是渲染完毕的字符串 。
44
44
45
45
- #### ` bundleRenderer.renderToStream([context]) `
46
46
47
- 将 bundle 渲染为 Node.js 流(stream). 上下文对象(context object)可选。更多细节请查看[ 流式渲染] ( ./streaming.md ) 。
47
+ 将 bundle 渲染为一个 Node.js 流 (stream). 上下文对象 (context object) 可选。更多细节请查看[ 流式渲染] ( ./streaming.md ) 。
48
48
49
49
## Renderer 选项
50
50
51
51
- #### ` template `
52
52
53
- 为整个页面的 HTML 提供一个模板。此模板应包含注释 ` <!--vue-ssr-outlet--> ` ,作为渲染应用程序内容的占位符 。
53
+ 为整个页面的 HTML 提供一个模板。此模板应包含注释 ` <!--vue-ssr-outlet--> ` ,作为渲染应用内容的占位符 。
54
54
55
- 模板还支持使用渲染上下文(render context)进行基本插值:
55
+ 模板还支持使用渲染上下文 (render context) 进行基本插值:
56
56
57
- - 使用双花括号(double-mustache)进行 HTML 转义插值(HTML-escaped interpolation);
58
- - 使用三花括号(triple-mustache)进行 HTML 不转义插值(non-HTML-escaped interpolation)。
57
+ - 使用双花括号 (double-mustache) 进行 HTML 转义插值 (HTML-escaped interpolation);
58
+ - 使用三花括号 (triple-mustache) 进行 HTML 不转义插值 (non-HTML-escaped interpolation)。
59
59
60
- 当在渲染上下文(render context)找到某些数据时,模板会自动注入合适的内容 :
60
+ 当在渲染上下文 (render context) 上存在一些特定属性时,模板会自动注入对应的内容 :
61
61
62
- - ` context.head ` :(字符串)任意 head 标记(markup),将注入到页面头部 。
63
- - ` context.styles ` :(字符串)任意内联 CSS,将注入到页面头部 。注意,如果对组件 CSS 使用 ` vue-loader ` + ` vue-style-loader ` ,此属性将自动填充 。
64
- - ` context.state ` :(对象)初始 Vuex store 状态,将作为 ` window.__INITIAL_STATE__ ` 内联到页面 。内联的 JSON 将使用 [ serialize-javascript] ( https://github.com/yahoo/serialize-javascript ) 自动清理,以防止 XSS 攻击。
62
+ - ` context.head ` :(字符串)将会被作为 HTML 注入到页面的头部 (head) 里 。
63
+ - ` context.styles ` :(字符串)内联 CSS,将以 style 标签的形式注入到页面头部 。注意,如过你使用了 ` vue-loader ` + ` vue-style-loader ` 来处理组件 CSS,此属性会在构建过程中被自动生成 。
64
+ - ` context.state ` :(对象)初始 Vuex store 状态,将以 ` window.__INITIAL_STATE__ ` 的形式内联到页面 。内联的 JSON 将使用 [ serialize-javascript] ( https://github.com/yahoo/serialize-javascript ) 自动清理,以防止 XSS 攻击。
65
65
66
66
此外,当提供 ` clientManifest ` 时,模板会自动注入以下内容:
67
67
68
- - 渲染所需的客户端 JavaScript 和 CSS 资源(使用异步 chunk 自动推断);
68
+ - 渲染当前页面所需的最优客户端 JavaScript 和 CSS 资源(支持自动推导异步代码分割所需的文件)
69
69
- 为要渲染页面提供最佳的 ` <link rel="preload/prefetch"> ` 资源提示(resource hints)。
70
70
71
71
你也可以通过将 ` inject: false ` 传递给 renderer,来禁用所有自动注入。
@@ -77,7 +77,7 @@ const renderer = createBundleRenderer(serverBundle, { ... })
77
77
- #### ` clientManifest `
78
78
- 2.3.0+
79
79
80
- 生成由 ` vue-server-renderer/client-plugin ` 生成的客户端构建 manifest 对象(client build manifest object)。客户端 manifest 对象(client manifest)通过「向 HTML 模板自动资源注入」可以为 bundle renderer 提供合适信息 。更多详细信息,请查看[ 生成 clientManifest] ( ./build-config.md#generating-clientmanifest ) 。
80
+ 通过此选项提供一个由 ` vue-server-renderer/client-plugin ` 生成的客户端构建 manifest 对象 (client build manifest object)。此对象包含了 webpack 整个构建过程的信息,从而可以让 bundle renderer 自动推导需要在 HTML 模板中注入的内容 。更多详细信息,请查看[ 生成 clientManifest] ( ./build-config.md#generating-clientmanifest ) 。
81
81
82
82
-
83
83
#### ` inject `
@@ -93,9 +93,9 @@ const renderer = createBundleRenderer(serverBundle, { ... })
93
93
94
94
- 2.3.0+
95
95
96
- 一个函数,用来控制什么文件应该生成 ` <link rel="preload"> ` 资源预加载提示(resource hints)。
96
+ 一个函数,用来控制什么文件应该生成 ` <link rel="preload"> ` 资源预加载提示 (resource hints)。
97
97
98
- 默认情况下,只有 JavaScript 和 CSS 文件会被预加载,因为它们是引导应用程序所必需的 。
98
+ 默认情况下,只有 JavaScript 和 CSS 文件会被预加载,因为它们是启动应用时所必需的 。
99
99
100
100
对于其他类型的资源(如图像或字体),预加载过多可能会浪费带宽,甚至损害性能,因此预加载什么资源具体依赖于场景。你可以使用 ` shouldPreload ` 选项精确控制预加载资源:
101
101
@@ -126,20 +126,20 @@ const renderer = createBundleRenderer(serverBundle, { ... })
126
126
127
127
- 2.3.0+
128
128
- 只用于 `createBundleRenderer`
129
- - Expects: `boolean | 'once'` (`'once'` only supported in 2.3.1+)
129
+ - Expects: `boolean | 'once'` (`'once'` 仅在 2.3.1+ 中支持 )
130
130
131
- 默认情况下,对于每次渲染,bundle renderer 将创建一个新的 V8 上下文并重新执行整个 bundle。这具有一些好处 - 例如,应用程序代码与服务器进程隔离,我们无需担心文档中提到的[ 状态单例问题] ( ./structure.md#avoid-stateful-singletons ) 。然而,这种模式有一些相当大的性能开销,因为重新执行 bundle 带来 高性能开销,特别是当应用程序很大时 。
131
+ 默认情况下,对于每次渲染,bundle renderer 将创建一个新的 V8 上下文并重新执行整个 bundle。这具有一些好处 - 例如,应用程序代码与服务器进程隔离,我们无需担心文档中提到的[ 状态单例问题] ( ./structure.md#avoid-stateful-singletons ) 。然而,这种模式有一些相当大的性能开销,因为重新创建上下文并执行整个 bundle 还是相当昂贵的,特别是当应用很大的时候 。
132
132
133
- 此选项默认为 ` true ` 用于向后兼容 ,但建议你尽可能使用 ` runInNewContext: false ` 或 ` runInNewContext: 'once' ` 。
133
+ 出于向后兼容的考虑, 此选项默认为 ` true ` ,但建议你尽可能使用 ` runInNewContext: false ` 或 ` runInNewContext: 'once' ` 。
134
134
135
135
> 在 2.3.0 中,此选项有一个 bug,其中 ` runInNewContext: false ` 仍然使用独立的全局上下文(separate global context)执行 bundle。以下信息假定版本为 2.3.1+。
136
136
137
- 使用 ` runInNewContext: false ` ,bundle 代码将与服务器进程在同一个 ` global ` 上下文中运行,所以请留意在应用程序代码中,会修改 ` global ` 的代码 。
137
+ 使用 ` runInNewContext: false ` ,bundle 代码将与服务器进程在同一个 ` global ` 上下文中运行,所以请留意在应用程序代码中尽量避免修改 ` global ` 。
138
138
139
- 使用 ` runInNewContext: 'once' ` (2.3.1+),bundle 将在独立的` 全局 ` 上下文(separate global context)取值,然而只在启动时取值一次。这提供了更好的应用程序代码隔离,因为它防止 bundle 意外污染服务器进程的 ` global ` 对象。注意事项如下:
139
+ 使用 ` runInNewContext: 'once' ` (2.3.1+),bundle 将在独立的` 全局 ` 上下文 (separate global context) 取值,然而只在启动时取值一次。这提供了一定程度的应用程序代码隔离,因为它能够防止 bundle 中的代码意外污染服务器进程的 ` global ` 对象。注意事项如下:
140
140
141
- 1 . 在此模式下,修改 ` global ` (例如,polyfill)的依赖模块不能进行外部暴露 ;
142
- 2 . 从 bundle 执行返回的值将使用不同的全局构造函数,例如,在服务器进程中捕获到 bundle 的内部错误,不会是 ` Error ` 的一个实例。
141
+ 1 . 在此模式下,修改 ` global ` (例如,polyfill)的依赖模块必须被打包进 bundle,不能被外部化 (externalize) ;
142
+ 2 . 从 bundle 执行返回的值将使用不同的全局构造函数,例如,在服务器进程中捕获到 bundle 内部抛出的错误,使用的是 bundle 上下文中的 Error 构造函数,所以它不会是服务器进程中 ` Error ` 的一个实例。
143
143
144
144
参考:[ 源码结构] ( ./structure.md )
145
145
@@ -149,11 +149,11 @@ const renderer = createBundleRenderer(serverBundle, { ... })
149
149
- 2.2.0+
150
150
- 只用于 `createBundleRenderer`
151
151
152
- 显式地声明 server bundle 的基本目录(base directory),以从 ` node_modules ` 解析依赖模块 。只有在所生成的 bundle 文件与外部的 NPM 依赖模块放置在不同位置,或者 ` vue-server-renderer ` 是通过 npm-linked 链接当前项目中时,才需要配置 。
152
+ 显式地声明 server bundle 的运行目录。运行时将会以此目录为基准来解析 ` node_modules ` 中的依赖模块 。只有在所生成的 bundle 文件与外部的 NPM 依赖模块放置在不同位置,或者 ` vue-server-renderer ` 是通过 npm link 链接到当前项目中时,才需要配置此选项 。
153
153
154
154
- #### ` cache `
155
155
156
- 提供[ 组件缓存] ( ./caching.md#component-level-caching ) 具体实现。缓存对象必须实现以下接口(使用 Flow 记号 ):
156
+ 提供[ 组件缓存] ( ./caching.md#component-level-caching ) 具体实现。缓存对象必须实现以下接口(使用 Flow 语法表示 ):
157
157
158
158
``` js
159
159
type RenderCache = {
@@ -174,7 +174,7 @@ const renderer = createBundleRenderer(serverBundle, { ... })
174
174
})
175
175
```
176
176
177
- 请注意,缓存对象应至少要实现 ` get ` 和 ` set ` 。此外,如果 ` get ` 和 ` has ` 接收第二个参数作为回调,那 ` get ` 和 ` has ` 也可以是可选的异步函数。这允许缓存使用异步 API,例如,一个 redis 客户端:
177
+ 请注意,缓存对象应至少要实现 ` get ` 和 ` set ` 。此外,如果 ` get ` 和 ` has ` 接收第二个参数作为回调,那 < code > get</ code > 和 < code > has</ code > 也可以是可选的异步函数。这允许缓存使用异步 API,例如,一个 redis 客户端:
178
178
179
179
``` js
180
180
const renderer = createRenderer ({
0 commit comments