前后端分离seo
- 后端渲染(ssr):就是服务器先将后台代码在服务端先生产html,浏览器直接接受经过服务器生成的htmk页面
- 优点:
- 前端耗时少(前端只负责html页面的展示)
- 更好的seo
- 坏处: 网络传输数据大,占用服务器资源
- 优点:
- 前端渲染(csr) —- spa 单页面应用:浏览器将后端数据,将数据排列成可读的html字符串是由浏览器来完成,形成字符串后再显示
- 优点: 网路数据小,不占用服务器
- 缺点:不利于seo,前端耗时多
- 解决前端渲染SEO问题
- SEO
- vue—-ssr https://ssr.vuejs.org/zh
- vue—-Nuxt.js https://nuxtjs.org/
- SEO和首屏白屏幕(预渲染)
- 就是将有些页面直接生产html,在vue打包的时候。这样就可以直接渲染在页面上来了
- SEO
同构渲染: 前后端公用js,首次渲染使用Node.js来直出HTML
NUXT.js
安装步骤
安装node.js
- 先要安装vue-cli 脚手架
npm install @vue/cli
- 安装create-nuxt-app
npm install create-nuxt-app
- 创建项目
- 安装过程程序的问题
- 项目名字
- 项目作者
- 使用第三方框架
- 包管理器
目录文件
- 资源目录 assets
- 组件目录 components
- 布局目录 layouts
- 中间件目录 middleware
- 页面目录 pages
- 插件目录 plugins ```
- 使用第三方模块:
- 注入$root和context: 希望在整个应用中使用某个函数和属性值,此时需要将他们注入VUE实例(客户端),context(服务端)甚至store(vues)中
- 注入Vue实例: 将内容注入VUE实例,避免重复引入
- 注入context
- 同时注入 ```
- 静态文件目录 static
- store目录
- nux.config.js nuxt配置文件 类似与webpack.config.js
- package.js 描述依赖文件和对外暴露借口脚本
别名
别名 目录<br /> ~ 或 @ srcDir<br /> ~~ 或 @@ rootDir<br /> 默认情况下,srcDir 和 rootDir 相同。
配置
- bulid
css: 用于定义应用的全局(所有页面都需要的的样式)、模块文件
- 使用sass 需要安装 node-sass sass-loader
nuxt.config.js
module.exports = {
css:[
'bulma',
// 项目里用css文件
"@/assets/css/main.css",
// 项目用的scss文件
"@/assets/css/main.scss"
]
}
- 使用sass 需要安装 node-sass sass-loader
dev :测试环境的配置
- env:环境变量配置
- generate:
- head
- loading
- moudulesDir
- plugins
- rootDir
- router
- server
- srcDir
- dir
- transition
页面的配置
- asyncData方法: 支持异步数据处理
- 在页面每次加载前会调用
- fetch: 用于在页面渲染前填充状态树
- head: 用来定义每个页面的头部信息
- layout: 指定当前页面使用的布局
- loading:
- transition:指定页面切换的动画
- scrollToTop:
- 布尔值:默认 false
- 用于是不是需要将当前页面滚动到顶部
- validate: 用于检验动态路由参数
- middleware: 指定页面的中间件,中间件会在渲染前调用
线上部署
命令 | 描述 |
---|---|
nuxt | 启动一个热加载的 Web 服务器(开发模式) localhost:3000 |
nuxt build | 利用 webpack 编译应用,压缩 JS 和 CSS 资源(发布用) |
nuxt start | 以生成模式启动一个 Web 服务器 (nuxt build 会先被执行) |
nuxt generate | 编译应用,并依据路由配置生成对应的 HTML 文件 (用于静态站点的部署) |
- 在本地 npm run build ,会在.nuxt 文件夹下面生成dist文件
- 把本地 .nuxt , static , package.json , nuxt.config.js 四个文件放到服务器目录文件下
- 进入文件目录 ,安装以来 npm install -production
- npm start 启动 项目
配置nginx
- 作用: 客服端访问的地址,通过nginx 的反向代理可以访问服务器
使用yurm安装nginx
$ sudo yum -y install nginx # 安装 nginx sudo的意思是管理员运行
$ sudo yum remove nginx # 卸载 nginx
nginx -t 查看nginx的地址
- 修改ngnix的配置
后台可能不会把你的nuxt的项目放到根目录上,所以需要配置下路由
# nuxt.config.js
export default {
mode: 'universal',
router: {
// nginx配置的路径不是根目录,需要给每个路由加上一个nuxt,测试的时候不需要不需要
base: process.env.NODE_ENV === 'production'? '/nuxt/':'/'
},
}
nginx也需要配置,配置完成后需要重启nginx nginx -s reload
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name www.visney.cn;
location /nuxt/ {
proxy_pass http://127.0.0.1;
# http://你的ip/nuxt/
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
直接使用 http:// 你的ip/nuxt/ 就可以直接访问
使用npm管理
为了全局管理创建了一个ecosystem.config.js 的文件。
资料来源:
module.exports = {
apps : [{
name : 'TOB_NODE', # 项目名字
script: 'script: '/data/nuxt/node_modules/nuxt/bin/nuxt.js', # 项目脚本启动路径
cwd: '' # 项目应用启动路径
/*
cwd 应用启动的路径,
关于script与cwd的区别举例说明:
在/home/polo/目录下运行/data/release/node/index.js,
此处script为/data/release/node/index.js,cwd为/home/polo/;
*/
# 开发环境变量
env: {
NODE_ENV: 'development'
},
# 测试环境变量
env_testing: {
NODE_ENV: 'testing'
},
// 生产环境变量
env_production : {
NODE_ENV: 'production'
},
// 实例个数
instances: 2,
// 集群模式
exec_mode: 'cluster',
// 完整日志路径
output: '/opt/log/tob/node/output.log',
// 错误日志路径
error: '/opt/log/tob/node/error.log',
// 访问日志路径
log: '/opt/log/tob/node/tob-log.log',
// 日志格式
log_type: 'json',
// 合并日志
merge_logs: true,
// 日志日期格式
log_date_format: 'YYYY-MM-DD HH:mm:ss'
}]
};