vue-server-renderer 简单了解
该软件包的作用是:vue2.0 提供在 node.js 服务器端呈现的。
API
- createRenderer
该方法是创建一个 renderer 实列。如下代码:
1 | const renderer = require('vue-server-renderer').createRenderer() |
- renderer.renderToString(vm, cb);
该方法的作用是:将 Vue 实列呈现为字符串。该方法的回调函数是一个标准的 Node.js 回调,它接收错误作为第一个参数。如下代码:
1 | // renderer.js 代码如下: |
div 中的 data-server-rendered 属性告诉 VUE 这是服务器渲染的元素。并且应该以激活的模式进行挂载。
- createBundleRenderer(code, [rendererOptions])
Vue SSR 依赖包 vue-server-render, 它的调用支持有 2 种格式,createRenderer() 和 createBundleRenderer(), 那么 createRenderer()是以 vue 组件为入口的,而 createBundleRenderer() 以打包后的 JS 文件或 json 文件为入口的。所以 createBundleRenderer()的作用和 createRenderer() 作用是一样的,无非就是支持的入口文件不一样而已。
这个插件做了什么
server.js
1 | const Vue = require('vue') |
app.js
1 | const Vue = require('vue') |
index.html
1 |
|
访问一下localhost:3000
- 进入
renderer.renderToString
调用
1 | renderToString: function renderToString ( |
- 走进 render 方法后断点往下走,在 renderNode 方法中,第一个参数是生成的 Vnode
看一下 Vue.prototype._render 方法
1 | Vue.prototype._render = function () { |
最后生成的 Vnode
- 进入 templateRenderer.render 方法调用
1 | TemplateRenderer.prototype.render = function render (content, context) { |
得到的模板
- 模板作为结果返回
创建 renderer 传入参数( utf-8 编码格式的入口文件,客户端构建出来的 json 文件内容)
生成的 renderer
访问 http://localhost:3000/home
生成模板文件返回
是没有事件的,看一下前端激活
通过模板加载 js 文件,前端入口文件调用 createApp 方法
获取到 vm 实例与 router 实例
往 readyCbs 数组里添加回调
当路由准备好的时候遍历调用数组回调
进入 vm.\$mount 方法挂载实例
后面就不说了