Nuxt.js从出师到挂帅[第1期]概述

简介: 现在我们的项目大多数都是SPA(单页面应用),感觉单页面应用比之前的模板渲染要好很多,首先单页面应用是前后端分离,架构清晰,前端负责交互逻辑,后端负责数据,前后端单独开发,独立测试。但是,SPA不利于SEO(搜索引擎优化),那么为什么要做SEO?做SEO有什么好处?简单来说SEO是一种利用技术手段提升网站在搜索引擎之中的排名的方式,让搜索引擎更为信任网站,通过提升排名获得更多网站流量。目前大部分的Vue项目本质是 SPA 应用,React、Angular也都是SPA应用。

前言


微信图片_20220519211710.png现在我们的项目大多数都是SPA(单页面应用),感觉单页面应用比之前的模板渲染要好很多,首先单页面应用是前后端分离,架构清晰,前端负责交互逻辑,后端负责数据,前后端单独开发,独立测试。但是,SPA不利于SEO(搜索引擎优化),那么为什么要做SEO?做SEO有什么好处?简单来说SEO是一种利用技术手段提升网站在搜索引擎之中的排名的方式,让搜索引擎更为信任网站,通过提升排名获得更多网站流量。目前大部分的Vue项目本质是 SPA 应用,React、Angular也都是SPA应用。SPA应用广泛用于对SEO要求不高的场景中。在我们开发的过程中,我们有 SEO 的需求,我们需要搜索引擎更多地抓取到我们的项目内容,此时我们需要SSR。SSR保证用户尽快看到基本的内容,也使得用户体验性更好。Vue官网提供了Vue SSR(Server Side Render)指南服务端渲染,即:网页是通过服务端渲染生成后输出给客户端。比如JSP、PHP、JavaWeb等都是SSR架构,也就是服务端取出数据和模板组合生成 html 输出给前端,前端发生请求时,重新向服务端请求 html 资源,路由也由服务端来控制。 那么我们本次主要针对Vue官网推荐的服务端渲染框架Nuxt.js讲解。


服务端渲染(Server-Side Render)介绍


客户端渲染(Client-Side Render):客户端渲染,页面初始加载的 HTML 页面中无网页展示内容,需要加载执行 JavaScript 文件中的 Vue 代码,通过 JavaScript 渲染生成页面,同时,JavaScript 代码会完成页面交互事件的绑定。 服务端渲染:所有数据请求和 html 内容已在服务端处理完成,浏览器收到的是完整的 html 内容,可以更快的看到渲染内容,在服务端完成数据请求。


Nuxt.js介绍


  • Nuxt.js是一个基于 Vue.js 的轻量级应用框架,可用来创建服务端渲染 (SSR) 应用,也可充当静态站点引擎生成静态站点应用
  • 通过对客户端/服务端基础架构的抽象组织,Nuxt.js 主要关注的是应用的 UI渲染。


架构图


微信图片_20220519212325.png


优点


  • 基于 Vue.js
  • 自动代码分层
  • 服务端渲染
  • 强大的路由功能,支持异步数据
  • 静态文件服务
  • ES6/ES7 语法支持
  • 打包和压缩 JS 和 CSS
  • HTML头部标签管理
  • 本地开发支持热加载
  • 集成ESLint
  • 支持各种样式预处理器: SASS、LESS、 Stylus等等
  • 首屏的加载时间优化
  • 进行SEO优化
  • 无需为了路由划分而烦恼,你只需要按照对应的文件夹层级创建 .vue 文件就行
  • 无需考虑数据传输问题,nuxt 会在模板输出之前异步请求数据(需要引入 axios 库),而且对 vuex 有进一步的封装
  • 内置了 webpack,省去了配置 webpack 的步骤,nuxt 会根据配置打包对应的文件


Nuxt.js和纯Vue项目对比



1. build后目标产物不同


  • vue: dist
  • nuxt: .nuxt


2. 网页渲染流程


  • vue: 客户端渲染,先下载js后,通过ajax来渲染页面;
  • nuxt: 服务端渲染,可以做到服务端拼接好html后直接返回,首屏可以做到无需发起ajax请求;


3. 部署流程


  • vue: 只需部署dist目录到服务器,没有服务端,需要用nginx等做Web服务器;
  • nuxt: 需要部署几乎所有文件到服务器(除node_modules,.git),自带服务端,需要pm2管理(部署时需要reload pm2),若要求用域名,则需要nginx做代理。
  • 本地运行npm run build打包,然后把.nuxt、static、nuxt.config.js、package.json、package-lock.json上传到服务器,上传好后,运行npm install安装依赖 最后运行npm run start启动项目。
  • 另外一种方法在服务器上打包上传整个项目到服务器上,当然像node_modules、.idea之类的除外,接着依次运行:npm install|npm run build|npm run start

注意: 如果有node-sass模块,安装过程可能会报错,运行npm install node-sass --unsafe-perm --save-dev来单独安装这个模块就好了。

  • netstat -lnp|grep 8080    // 查看8080端口是否被占用
  • 使用pm2守护进程pm2 start npm --name "nuxt" -- run start
  • npm install core-js@2  // nuxt 部署报错,缺少core-js
  • pm2常用命令
pm2 list  // 查看任务列表
pm2 stop app_name|app_id  // 停止指定name或者id的任务
pm2 stop all  // 停止所有任务
pm2 delete app_name|app_id  // 删除指定name或者id的任务
pm2 delete all  // 删除所有任务
pm2 logs // 查看日志
pm2 kill  // 杀死pm2进程


4. 项目入口


  • vue: /src/main.js,在main.js可以做一些全局注册的初始化工作;
  • nuxt: 没有main.js入口文件,项目初始化的操作需要通过nuxt.config.js进行配置指定。


环境搭建



方式一:使用prerender-spa-plugin插件获得SSR的效果


严格上来说,此种实现方式并非叫做 SSR,而是预渲染。不过效果上是一样的,甚至某种程度上来说可能要比 SSR 更好。相比官方提供的 SSR 繁琐配置,prerender 配置更简单快捷,如无特殊要求只需在 webpack 中加一个 plugin 的配置即可。 但是此方式只支持h5 history方式的路由,不支持hash方式的路由。


方式二:使用官方提供的轮子在node端做SSR


本示例只说明如何完成一个相对基础的 SSR,vuex以及缓存等可参考官网说明。



目录
相关文章
|
1月前
|
Web App开发 存储 JavaScript
Node.js概述
Node.js概述
39 3
|
5月前
|
JavaScript 前端开发 开发者
JavaScript数据类型概述及Undefined与Null详解
JavaScript数据类型概述及Undefined与Null详解
N..
|
6月前
|
JavaScript 前端开发 API
Vue.js概述
Vue.js概述
N..
68 2
|
6月前
|
存储 XML 前端开发
编程笔记 html5&css&js 036 CSS概述
编程笔记 html5&css&js 036 CSS概述
|
6月前
|
数据采集 JavaScript 前端开发
Vue Nuxt.js 概述
Vue Nuxt.js 概述
104 0
|
存储 JavaScript 前端开发
【js】函数概述学习笔记(8)
【js】函数概述学习笔记(8)
41 0
|
Web App开发 JavaScript 前端开发
Node.js -- Node.js概述与安装和运行
Node.js -- Node.js概述与安装和运行
|
JavaScript 前端开发 数据库
Node.js 阻塞与非阻塞概述
Node.js 阻塞与非阻塞概述
|
XML 缓存 JavaScript
JavaScript-JavaScript概述及简单使用
JavaScript-JavaScript概述及简单使用
108 0
|
Web App开发 JavaScript 开发工具
零基础html5+div+css+js网页开发教程#001网页开发概述
零基础html5+div+css+js网页开发教程#001网页开发概述