前端基础设施建设
“技术基建”,就是研发团队的技术基础设施建设,是一个团队通用技术能力的沉淀。
基建的意义
基础建设的发起从业务问题中来,到解决实际问题中去,更具有以下几点意义:
- 解决问题:帮助解决业务问题。
- 团队练兵:承担建设的虚拟团队,在建设过程中能为同学提供不同维度的锻炼场景,在业务问题与场景的识别、方案设计、新技术实践、项目管理和产品化思维方面都能提供实践成长的空间,起到练兵的作用。
- 梯队建设:一个虚拟建设小组本质上也是一个团队,过程中能对不同角色进行锻炼和考察,这有助于团队梯队的完善。
- 影响力建设:建设结果对于业务的促进,更容易获得内部合作方的认可;沉淀下来的好的经验,可以对外输出分享,也是对影响力的有力帮助。
为什么搞基建?
- 对于一个研发团队,不能一味在使用蛮力的情况下进行业务的支撑。
- 如果一味的出蛮力,业务是无法实现跨越式增长的
- 有时候大家都在各个项目重复的造轮子,很多情况下都在浪费大量的时间,基础建设可以极大地提高效率
- 如果未来业务大量的正价,后期的支持能力,当前的状况下无法满足,每个团队都有自己的规范无法得到同意
- 基建最核心的价值,就是帮助业务可以满足未来的发展所需
基建怎么搞?
- 基础建设的内容和业务需要的内容是分不开的。
- 目前我们所需要的例如有私有化服务存储、脚手架、组件库、打包部署工具等等。
基建研发流程
一个基本的研发流程闭环:
需求导入=> 技术方案制定=>需求拆解=>本地编码=>联调=>自测优化=>提测修复bug=>打包&部署=>数据收集&分析复盘=>优化迭代=>新的需求导入,完成闭环
基建怎么搞
规范&文档(Docs)
- 对于文档,为了写而写的文档是垃圾,不如不写。
- 文档的重点在说人话,在于有效性,在于直观、省事、不绕。
- 想想一个 UI 组件库的文档,先给你看可交互的 Demo 再提供 API 信息,和直接开头就罗列一大堆的 API 文字介绍
- 组件库文档
- 具备代码与UI能力
- 采用类似dumi风格文档,实时预览能力
搭建CNPM私有仓库
- 为什么?
- 可以将我们的代码都开源统一用 NPM 进行管理的
- 总有一些是我们不希望的完全开放的代码,作为企业是核心秘密保留在公司内部
- 确保npm服务快速、稳定:对于我们来说,上线生产系统的时候,需要花半小时甚至更久等待npm模块依赖安装完毕,是不可接受的。部署镜像后,可以确保高速、稳定的npm服务。
- 发布私有模块:官方的npm上的模块全部是开源的。一些与我们业务逻辑相关的模块可能不适合开源。这部分私有的模块放在私有NPM仓库中,使用起来各种方便。
- 控制npm模块质量和安全:npm上的模块质量参差不齐,搭建私有仓库,可以更严格地控制模块的质量和安全,只有经过审核的模块才允许被加入私有仓库。
- 怎么搭建
- 采用开源的cnpm,https://github.com/cnpm/cnpmjs.org
- cnpm的特点
- 压缩包等文件从数据库中分离,放在CDN上,减轻了数据库的压力,提高了访问速度。
- 使用MySQL替换了CouchDB,更容易部署。同时由于大部分开发者更熟悉MySQL,因此架设起来更方便。
- CDN和MySQL都可以方便地扩展。
本地工程化环境(CLI)
CLI的意义
- 本地开发环境,省事的可能直接拥抱框架选型对应的全家桶,如 Vue 全家桶,或者用 Webpack 撸一个脚手架。能力多一些的会再为脚手架提供一些插件服务,如 Lint 或者 Mock。从简单的一个本地脚手架,到复杂的一个工程化套件系统,
- 目的都是为了本地开发流程的去人肉化、自动化。
- 新建工程不必在进行新的项目,ui库,utils库等的手动浪费时间的引入
怎么做CLI?
本地开发环境基建,是一个工程化套件环境,核心理念就是尽量 “一步搞定所有事”,把本地环境的配置和使用尽量变的傻瓜化无脑化
组件开发与管理
- 沉淀了一套类似的模板化能力
- 沉淀一套我么我们自己风格的支持业务场景UI能力
- 覆盖场景包含但不限于
- web
- h5
- Flutter
- 微信小程序
- Electron
- Node.js
- Webpack
前端基础资产
我们现在对前面一些实物进行总结,前端团队的规范(标准化)、工具链(CLI)、基于工具链之上的可视化辅助客户端(GUI),提到了组件(模块)、模板、应用。对工具的抽象和业务的可复用抽象,是一个团队的基础资产。。基础资产这部分,建设分层如下:
在特定项目特定场景下的技术选型
前端框架
- react
- vue2/vue3
小程序(不局限于微信小程序,支付宝小程序,字节跳动小程序,百度小程序...)
- Taro(react)
APP
- Flutter
- uniapp
微前端
- qiankun
服务器端渲染(取决于技术栈)
- next.js
- nuxt.js
Nodejs
- egg.js
- next.js
- koa.js