Vue.js 是构建客户端应用程序的框架。默认情况下,可以在浏览器中输出 Vue 组件,进行生成 DOM 和操作 DOM。然而,也可以将同一个组件渲染为服务器端的 HTML 字符串,将它们直接发送到浏览器,最后将静态标记”混合”为客户端上完全交互的应用程序。
服务器渲染的 Vue.js 应用程序也可以被认为是”同构”或”通用”,因为应用程序的大部分代码都可以在服务器和客户端上运行。
先弄一个客户端应用
使用vue-cli构建了一个最简单的应用,包含了4个页面,首页,新闻列表页,计数页,关于页。
其中首页和关于页为静态页,新闻列表页需要请求接口获取新闻列表,计数页使用vuex实现最简单的计数功能。
注意修改路由模式为history和vuex的使用。
GitHub地址:https://github.com/cdInit/vue-ssr/tree/master/step01
在客户端应用中改造
然后再客户端应用中逐步改造。
修改组件中获取数据方式
1 | //News.vue |
修改main.js
因为是服务端渲染,所以main.js里面的内容需要更改,为了和官方文档保持统一,我把main.js修改为了app.js。
修改后的代码。
1 | //app.js |
参考官方文档:
添加 entry-client.js
1 | //entry-client.js |
添加 webpack.base.config.js
在添加ssr需要的配置文件之前,将vue-cli生成的配置文件备份到其他地方。
1 | //webpack.base.config.js |
添加 webpack.client.config.js
1 | const webpack = require('webpack') |
运行 webpack –config ./build/webpack.client.config.js –progress 我们就可以生成客户端的东西,那么接下来配置服务端的SSR
添加 entry-server.js
1 | import { createApp } from './app' |
添加 webpack.server.config.js
1 | const webpack = require('webpack') |
运行 webpack –config ./build/webpack.server.config.js –progress
添加 server.js
1 | const fs = require('fs') |
遇到缺少的包,装上就可以了。
运行:
node ./server.js
那么最后实现的效果是:
1.当我在首页刷新的时候,服务器会渲染html到客户端,但是点击其他的页面,并不会向服务器发送多余的请求。比如点击 新闻列表 ,依然是ajax请求新闻列表到客户端渲染。
2.当我在 新闻列表 刷新的时候就不一样了,他不会在客户端渲染,而是在服务端渲染好了然后把html发送给客户端。
这样就实现了简单的ssr,同构。
源码:https://github.com/cdInit/vue-ssr/tree/master/step02
后续:
- 我这里也只是弄了一个简单的例子出来,后面有时间再继续研究其他的东西,比如nuxt等。