# SPA应用自动化部署_架构
昨天提了离职,今天本来是要开始交接工作的,但是跟我对接的人请假了。趁着这个空档,我捋了下我们的前端SPA应用的部署和管理方式。在此之前谈谈我认为的,理想的前端工程化的基础服务应该包含哪些东西:
- 脚手架创建项目
- 自动配置好开发 构建 上报 部署脚本 一系列东西
- 然后上报内容会加上 依赖库、构建的一些情况
- 平台按项目划分 每个项目分为项目基础、构建报告、单测报告、页面测试以及性能数据(白屏时间 网络加载情况)
- 还有预警 比如构建体积过大、构建时间突增、用了过期的库等等
# Version Ⅰ
为了表达得清楚,我画了思维导图:
# 说明
访问过程:浏览器请求Nginx
web服务器,Nginx
经过负载权衡,转发请求至某一台java
服务器,java
请求我们的文件服务器
即Projects Manager
得到文件服务器指定的资源CDN地址
,然后用Thymeleaf
渲染最新的资源链接到模板html
上。然后把完整的html
交给浏览器
。浏览器开始dom
解析,遇到script
标签包裹的资源链接
请求CDN服务器
得到前端js/css
资源。
优势:
- 由于用户访问时,
java
服务是实时获取的Projects Manager
指定的前端资源,如果出现线上前端bug
,前端开发在修复好后,可以直接打包上传到cdn,然后去Projects Manager
的后台管理系统上,设置刚刚修复bug打包的资源为线上资源,线上bug就修复掉了。比起曾经需要长时间发布庞大的java项目,明显提高了修复效率以及减少了宕机风险。 - 每个前端项目都分配有一个id,
Projects Manager
可以统一管理大量前端项目静态资源。
劣势
- 前端项目固定在了指定
java
项目中,造成请求其他java
服务有跨域问题。解决方式经常是请求自己所在的java
项目,然后后端人员再去请求其他java
服务。 java
项目需要在yml
配置中添加前端的Projects Manager
访问地址和具体的前端项目id
。经常有后端人员不知道这是什么,然后在新建测试环境的时候忽略他们。最后造成无法访问。
# Version Ⅱ
这个版本当然是为了解决上个版本的问题而诞生。如果说上个版本和后端项目还有一丝的联系,这个版本前后端就彻底分离了。
# 说明
Projects Manager
除了管理项目资源,还承载了模板的渲染。虽然这个Node
服务只用来渲染模板和转发请求有点浪费,但如果它管理了大量的单页应用,又似乎还说得过去。在正常的请求前添加标识符,然后在Projects Manager
中配置标志符和java服务的映射,实现代理到不同的java服务。
# 需要做的事情
以 Version Ⅱ 为例,需提供:
- 实现提供上传文件到CDN的webpack插件 需要控制权限 需要强制备注上传原因
- 提供管理项目静态资源的管理后台,包括新增项目、新增用户权限、修改指定环境静态资源、域名管理、代理目标管理等功能
- 提供Node Server,用以渲染SPA应用的模板文件以及代理请求到其他服务器
- 提供对项目模板的个性化定制