Vue服务器渲染Nuxt学习笔记
关于SSR的文章网上很多,一开始看得我云里雾里。然后去Vue.js 服务器渲染指南和nuxt官网看了看,发现文章大多都是搬运官网的内容,真正讲的清晰明了的很少。所以想写篇文章学习下SSR,希望能够帮助大家快速理解Vue SSR。 什么是SSR?SSR,即服务器渲染,就是在服务器端将对Vue页面进行渲染生成html文件,将html页面传给浏览器。 优点:
可以从下面两张图来看,第一张图是SSR生成的HTML页面,第二种是传统SPA生成的HTML页面。
Nuxt.js我看了官方 SSR 的介绍,也看了 Nuxt.js 的文档。本质上来说 SSR 是node后端的操作行为,作为只想好好写前端代码的我,不想太折腾。而 Nuxt.js 非常完美地整合了 SSR 的功能。让我们可以开箱即用~官方也推荐使用 Nuxt.js 来搭建 SSR 项目。 好处我觉得 Nuxt.js 相比自己写 SSR 有几点好处。
安装安装方法在此。很简单,生成模板,然后npm安装依赖,最后再运行。 简单搬运下步骤吧。
// 安装依赖项
$ cd
安装遇到的问题:由于 Nuxt.js 中使用了 async...await 语法,而低版本的 node 不支持这个语法,所以必须升级 node 到 7.0 版本之上~ 然后建议不要使用cnpm,我用cnpm安装运行老报错,感觉有坑。 目录结构Nuxt.js 花了很大的篇幅讲它的目录结构,其实了解了目录结构就了解了 Nuxt.js 的大概。Nuxt.js 帮我们配置好了所有东西,我们只需要按照它的要求在相应目录下创建文件写代码即可。
Demo演示好消息,VueStudyDemos又更新啦!欢迎Star~本文Demo已收入到VueStudyDemos中。 下面我们来简单实现下各文件夹所提到的功能。 资源加载我在 assets 文件夹下添加了 font-awesome 字体库,在 static 文件夹中放了张 Vue 的 logo 图片。然后对资源进行调用。 这里需要将 font-awesome 的 css 变为全局 css,避免每个用到的页面中都 import 字体库的css。所以我们在 nuxt.config.js 中添加如下配置。 组件定义组件存放在 components 文件夹下,这个我们讲目录的时候提到过。组件的用法和常用 vue 组件用法一致。 定义组件 Avatar,然后在 Page 页面中使用。 布局在 layouts 目录中,default 是默认布局。我们可以修改默认布局也可以新建布局来使用。 在布局文件中 标签是我们要服务器渲染的区域。 下面我们来创建个布局玩玩。 然后我们来使用布局,在 pages 页面中配置 layout 选项(如果不配置默认就是 default)。 中间件所谓中间件,就是在两个页面跳转之间执行的行为。比如我定义一个中间件 add.js 然后在 nuxt.config.js 中进行配置: 这样,在每次页面跳转的时候都会执行一次中间件方法了。当然,也可以单独定义某个页面的中间件,具体看官网啦~ 页面页面,就是在pages目录下的 *.vue 文件,Nuxt.js 将目录结构配置为 vue-router 路由系统,所以我们可以直接通过文件名来访问到相应页面(先不提特殊路由)。 比如 pages/app.vue 文件就可以通过 http://localhost:3000/app 来进行访问。 注意:页面组件写法与常用 Vue 组件写法相同,但 Nuxt.js 还提供了一些特殊配置项来配置服务器渲染过程中的行为。具体有啥配置请看 页面文档。 路由路由就是使 pages 目录能够直接访问的原因。Nuxt.js 非常巧妙地使用目录结构和文件名称将 vue-router 的各种用法都涵盖进去了。如动态路由、嵌套路由等。具体可参考文档。也可以看看demo的 pages 目录。 插件对于前端项目,插件的使用当然是必不可少的。官网上对这方面讲的很清楚。我贴一下 demo 中的用法。这里用的是 mint-ui 库。 这样就可以使用第三方库 mint-ui 啦! <mt-tab-container v-model="selected"> vuex对于 vuex,用法有两种:普通方式和模块方式,用法和我们常用的 vuex 一样。我的demo中是直接复制官网的代码。 需要注意的是,vuex 的数据会存在context对象中,我们可以通过context对象获取状态数据。 发布发布有两种方式服务器应用渲染部署和静态部署,发布方式看这里 最后去看 Nuxt.js 的 API,会发现 Nuxt.js 真的是高度封装。对于 Nuxt.js 生成的模板项目,只有一些必要配置是需要我们去完成的。Nuxt.js 可以说是一个非常友好而强大的 SSR 框架了。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |