为了更好的享受现代化前端开发框架的乐趣,前一阵把官网给用Vue重写了,开发效率上确实一下子提升了一大截,但是过了一阵用百度一搜,emmm……
对比一下别人家的,虽然不能像百度RMB玩家那样还有站点图标,但好歹描述信息要靠谱点儿把。
总结起来了就是,现在的搜索引擎爬虫对于客户端渲染的站点都不是太友好,没办法获取到ajax拉取回来的动态内容,解决方案嘛就是得把页面的渲染逻辑再拿回服务端,让地址直接导出的就是最终渲染结果了,在Vue的架构下大致是三种:
1、 用插件的形式进行预渲染,比如:prerender-spa-plugin,简单倒是简单,不过最终生成的页面没法儿展示接口获取的动态数据;
2、 使用Vue官方的SSR方案,尝试一阵把代码结构改的乱七八糟后,放弃……
3、 基于NUXTJS的方案,相对来说功能齐备,改造成本最低的一套。
改造步骤
新建Nuxt工程
因为nuxt本身有一系列直接的工程目录结构跟配置,所以最省心的方式还是新建工程后再从Vue工程慢慢的蚂蚁搬家过来。
1 | npx create-nuxt-app demo |
各种模块根据提示依据自己的需要来选择就好了,就是注意最后的”Choose rendering mode”选择”Universal (SSR)”,完成后的目录结构如下:
1 | demo |
为了看起来跟Vue跟亲切一些儿,新建src目录,把这assets,components,layouts,middleware,pages,plugins,static,store几个目录都拉进去,调整完如下:
1 | demo |
然后修改nuxt.config.js,指定源码的目录
1 | module.exports = { |
依赖库迁移(main.js)
从原有Vue工程的package.json直接复制对应的dependencies跟devDependencies,合并到新工程的package.json中就好了,此外Nuxt的工程中没有了main.js,对应的库引用需要在plugins中进行处理。
ElementUI
1、 plugins目录下新建element-ui.js文件
1 | // ElementUI |
2、 修改nuxt.config.js
1 | module.exports = { |
Axios
1、 安装依赖
1 | npm i -S @nuxtjs/axios |
2、 plugins目录下新建http.js文件
1 | import axios from 'axios'; |
3、 修改nuxt.config.js
1 | module.exports = { |
4、 程序中使用
1 | this.$axios.$get(...); |
VueLogger
1、 plugins目录下新建vuejs-logger.js文件
1 | import Vue from 'vue' |
2、 修改nuxt.config.js
1 | module.exports = { |
PostCSS
1、 修改nuxt.config.js
1 | module.exports = { |
静态文件迁移(public)
1、 原有public目录下的文件除index.html外全部转移至新工程的src/static下面;
2、 在src下新建app.html文件,其中对应nuxt.config.js中的head属性配置,就是要被动态替换的内容,模板如下:
1 |
|
其他部分可以从index.html中捣腾过来。
路由迁移(router.js)
在nuxt中路由会根据pages路径跟文件名自动映射处理,所以这一步的迁移工作就省略掉了
运行
最后运行一下看看效果
1 | npm run dev |
打包部署
1、 编译打包(其中generate是生成静态文件部署的打包,这里用不上),成功后项目下会生成.nuxt目录
1 | npm run build |
2、 修改pacakge.json(原有node方式无法在服务器上正常运行)
1 | { |
3、 将.nuxt目录、static目录和package.json文件上传至服务器,并安装依赖包
1 | npm install |
4、 编写启动脚本跟重启脚本
1 | start.sh |
5、 配置nginx转发
1 | server { |