开始说明
- 预估时间 1 天(包括优化和写脚本时间)
- 需要的角色
- 一个开发 (构建、部署;需要熟悉前后端);占比80%;
- 一个设计(主要设计logo、宣传图);占比10%;
- 产品(可以开发兼任,主要是根据landing.ant.design选型一下);占比10%;
- 借助的工具和框架
第一阶段;可视化设计
- 参考 landing.ant.design 说明文档;设计完后导出react源码组件;
- 设计师设计的素材;可以通过上传到七牛;获取到图片链接后,在引用到可视化设计里面;
第二阶段:使用umi来渲染react代码
mkdir tavel;cd tavel;mkdir srcumi g page index;mkdir Home; cd Home; unzip Home.zip; cd ../mv Home ./srcmv pages ./srcyarn add react react-domyarn add umi-plugin-react --save
vim .umirc.js // .umirc.js export default { plugins: [ [ 'umi-plugin-react', { antd: true, } ], ]}
vim src/pages/index.js// index.js import Home from '../Home'; export default function() { return ( <Home /> ); }
vim src/global.less//global.less@import './Home/less/antMotionStyle.less';
vim src/Home/index.jsx删除该句: import './less/antMotionStyle.less';
- 执行完后:umi dev,进行调试;如有报错 提示有依赖组件 is not install 则使用 yarn add ’组件名称‘ 安装一下;
- 最后进行 umi build; 在dist目录里面就能看到你要发布的内容
第三阶段(属于优化,可选操作):js上传到cdn;加快页面加载速度;
- 编译完后因为 umi.js 太大;超过了1M;且是放在根目录下;如果你站点没加cdn;会导致首次访问比较慢;所以建议你把umi.js 上传到cdn;再引用cdn的文件;
- 以上做法是可加速;但是一点改动比较频繁的话,每次都要在编译后把umi.js 传到cdn,会很麻烦;建议的做法是把 依赖第三方一些 js 、css分离出来;这些是基本不会随着每次编译而改变;把他们上传到cdn即可;具体做法:
vim .umirc.js 在plugins里面添加以下内容//.umirc.js plugins: [ ... ['umi-plugin-auto-externals', { packages: [ 'antd' ], urlTemplate: 'https://unpkg.com/{{ library }}@{{ version }}/{{ path }}', checkOnline: false, }], ]
tyarn add 'umi-plugin-auto-externals'; tyarn add 'moment';umi build;
- 最后把生成的 unpkg.com 文件上传到国内的七牛云; 修改index.html 文件的引用地址为新地址;
第四阶段(属优化,可选操作):seo友好
- 打开 dist/index.html;会看到里面body里面只有:
<div id="root"></div>;真正的内容是在js来生成的;这样对seo非常不友好;我们需要预渲染;在服务器返回给浏览器的时候就把内容渲染好了;umi需要seo友好化;咋做? - 查看umi说明文档里面的这个介绍: https://umijs.org/zh/guide/ssr.html#预渲染(pre-render) ;基本讲清楚了;写这篇博文的时候,该组件还是beta版,部分场景会无法成功渲染;
- 我只需渲染部分页面,所以选择在编译的时候进行渲染,操作如下:
vim .umirc.js 添加以下内容://.umirc.jsssr: true, plugins: [ ...['@umijs/plugin-prerender', {}],],
yarn add '@umijs/plugin-prerender'umi build
第五阶段: 服务器设置:
- 因为是spa应用;所以需要设置为不存在的路由都走 index.html 入口:以下为nginx配置
server { listen 80; server_name www.xxxx.com; root /www/static/; index index.html index.htm index.php; charset utf-8; location / { try_files $uri @fallback; autoindex on; } location @fallback { rewrite .* /index.html break; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } access_log /www/log/api.log; error_log /www/log/api.error.log; location ~ /\.ht { deny all; }}
完结
- 至此1天内撸完一个官网并上线;就讲解完了;里面的一些操作;比如编译、发布、修改cdn地址;这些都可以用脚本自动化走一下;具体可以看我的git代码:自动化发布脚本化工具
- 说明一下: 编译阶段进行预渲染,我使用的时候,简单的页面模板可以成功,复杂一点的不行;建议改成用服务端渲染的方式