nuxt初体验

188 阅读4分钟

什么是nuxt

Nuxt.js 是一个基于 Vue.js 的通用应用框架。通过对客户端/服务端基础架构的抽象组织,Nuxt.js 主要关注的是应用的 UI 渲染。我们的目标是创建一个灵活的应用框架,你可以基于它初始化新项目的基础结构代码,或者在已有 Node.js 项目中使用 Nuxt.js。Nuxt.js 预设了利用 Vue.js 开发服务端渲染的应用所需要的各种配置。除此之外,我们还提供了一种命令叫:nuxt generate ,为基于 Vue.js 的应用提供生成对应的静态站点的功能。我们相信这个命令所提供的功能,是向开发集成各种微服务(Microservices)的 Web 应用迈开的新一步。作为框架,Nuxt.js 为 客户端/服务端 这种典型的应用架构模式提供了许多有用的特性,例如异步数据加载、中间件支持、布局支持等。

以上是来自nuxt官方文档的描述

简单概括一下就是nuxt帮我们把服务端渲染的东西做了一个集成,同时支持静态站点部署和服务端渲染部署。

nuxt和vue的区别是什么

使用vue构建单页应用的时候,我们可以发现,请求的html其实只是返回了一个div的根节点,并没有返回其他任何内容,页面中的内容是在js加载完成之后再render到页面上的,也就是说,搜索引擎会认为,你的网站里的内容只有个空的div标签。

nuxt会有两种构建方式,一种是nuxt generate,将你开发的内容构建成一个静态的html页面,但此时就会有人问到,如果我页面中的内容是动态变化的呢?首先,nuxt generate也是可以通过一些方法实现动态数据的,此处不展开讨论;通过官方文档可以知道,我们还可以通过nuxt build和nuxt start的形式来做一个完全服务端渲染的项目。此时在看html的请求返回就可以看到,这时返回的就是一个完整的html页面了。

那这和个html的完整性有什么作用呢?这里需要提到的就是seo,每个搜索引擎都会去爬取各个网站的内容,然后根据网站内容和一系列复杂的算法计算出一个seo权重,这个权重也就决定了在用户搜索关键字的时候,你的网站出现的位置。很明显,权重越高,位置越靠前,而你的网站被访问的可能性也就越大。

实战总结

安装和初始化的操作官网已经介绍的很详细了,在此不多赘述,简单说下几个比较重要的特性和文件。

路由

nuxt 是不需要单独声明路由的,只需要在pages下面按照路由路径建立文件即可自动生成路由。

组件

nuxt 中组件全部放在components下,且在引用的时候不需要显示注册,直接引用即可。

nuxt.config.js

nuxt 最关键的配置文件,全局的配置都在这里完成。

head

在html的head中插入meta,script,title等自定义内容。如果插入script可能会出现解析问题,此时需要加入 __dangerouslyDisableSanitizers: ['script'] 。

build

对于webpack的一些定制化内容,如babel,alias的一些处理。

环境变量

可以在package.json的scripts中通过cross-env插入NODE_ENV的环境变量,同时需要在config中显示声明env对象,用来获取插入的环境变量。

asyncData

有时页面中的内容是通过接口动态获取的,如文章详情这类的页面,此时如果还是通过传统的接口获取形式的话就会发现,静态部分的页面已经是渲染好的,但是文章部分还是空的,显然这不是我们想要的结果。

nuxt提供了asyncData来应对此类情况。值得注意的是,一旦通过这种形式获取异步数据,也就以为着将原来在web端发送的请求转移到了node端,所以一旦出现报错或者其他bug都可能到只服务器挂掉,包括对于线上问题的排查,也只能通过服务器来查找,因此对于日志和容错的处理一定要到位。

同时官方也推荐使用pm2来做一些进程保护类的操作。

部署

由于我个人使用的是docker部署,因此只了解这一种情况。需要的做法就是建立dockerfile,将代码进行build操作,然后在最后通过CMD的形式运行start命令进行服务启动即可。

总结

nuxt本身的集成性和封装还是比较强的,很多服务端渲染的细节我们都无法看到,只是通过暴露出的api进行操作,但是从上手难度来说确实降低了很多,如果想要深入研究的话还是去了解其内部的实现原理会更好一点。