一个基于React16AntdMobxTypescript的前端脚手架。
传送地址:https://github.com/pablezhang/template-for-ts-react

为什么是template-for-ts-react

目前市面上曾经有create-react-app等开箱即用的脚手架,但create-react-app一方面没有默认反对typescript,另一方面,大量的的我的项目实际中,咱们曾经将TypescriptReact16MobxAntd作为React我的项目的最佳实际。因而,咱们开始了这个我的项目,并把大量的后盾管理系统实际逐教训渐退出本我的项目中,咱们心愿该我的项目能够为后盾管理系统,提供一个疾速启动的脚手架、设计良好的模块实际。如果你对我的项目中有优良的倡议,欢送分割咱们。

src文件目录构造

├─ App <br/>
├─ assets <br/>
├─ components <br/>
├─ packages <br/>
├─ pages <br/>
├─ services <br/>
├─ styles <br/>
├─ utils <br/>
├─ widget <br/>
├─ router.ts <br/>
Note<br/>
App ---- 我的项目入口文件夹

assets ---- 动态资源文件将爱

config ---- 在代码逻辑中会重复读取并且只可读取的内容,如不同环境下的后盾服务地址、cookie中的要害keyName等等

packages ---- 独立功能模块,通常除了第三方包,它不应该依赖任何模块。随着我的项目体量的逐步增大,它能够逐渐从我的项目中拆散成为一个独立存在的公有或私有的第三方包。

pages ---- 页面文件:页面级组件,通常状况下咱们倡议一条route对应一个page文件夹,并且route名称与page名称保持一致。

services ---- 零碎接口文件,咱们须要将零碎中所有用到的申请隔离在services文件夹下各个接口文件中。目标是,防止后盾接口变动而咱们需在在代码逻辑中追随更改。咱们将在下方具体阐明咱们设计理由。如果你看到了ExampleService.ts的内容感觉很奇怪,别着急,咱们会同样给出这么做的起因,也不要放心会加大你的工作量,咱们同样给出解决方案。

style ---- 全局款式文件夹:全零碎的通用款式文件,如你的theme.less common.less

utils ---- 通用功能模块:通常是逻辑固定、大量复用的功能模块,如request.tsPinYin.ts等固定输出固定输入的污浊功能模块

widget ---- 部件模块:通常是固定不变的、没有性能逻辑的组件,如FooterHeader等UI组件。

router.ts ---- 前端路由定义文件

接口隔离

设想你在工作中是否遇到过这样的场景:

接到需要后,前后端各自开发对应性能,2天后汇报进度,后盾同学:”后端性能做好了,就等前端联调了“,前端同学:“前端性能做好了,就剩跟后盾联调了”。产品经理、项目经理听后大喜,向上汇报进度,前后端性能进度实现80%。2天后产品经理迟迟未收到提测邮件,去找前后端同学,发现他们还在联调,前端同学冤屈的说到:“后盾的接口有问题须要改接口或者改参数。同一个接口在3个页面里调用过,后端同学改一个url,前端须要批改3个页面里的url,并且再提交再公布,再测试”。
在这里不探讨前后端如何高效合作的问题。思考下前端在这种情景下,有哪些状况是能够防止的。把前端、后端别离看成两个功能模块A和B的情景,此时A依赖B,而B并不依赖A,同时B对外裸露的性能可能是变动的。此时咱们须要思考两个状况,1、B提供的性能可能是变动的,咱们须要随时应答这种变动。2、咱们齐全不晓得B变动的可能性。应对于此,咱们须要将变动的局部隔离进来,将固定的局部封装起来。

思考下Socket通信,Socket两端不必思考对方是什么样的情景,Service设计的目标也是基于此,不管后盾接口的url、参数如何变动,咱们的调用形式是不变的,如ExampleService.getExampleList(...restPara)
在一个用户治理的性能里,以后端须要删除一个用户时,前端的代码逻辑应该是:调用删除接口-->删除胜利/失败-->提醒并刷新。而不应该关怀这个接口url是什么,参数是什么。依据迪米特法令,咱们的性能应该只负责调用接口,不关怀如何调用到后盾的接口。至于参数,咱们应该尽早提前约定,或者预判须要参数。此时应答上述场景,咱们只须要批改Service文件即可,不必批改逻辑代码文件。

另外一个场景

在工作中,后盾同学提供了一份swagger接口文档。前端同学每次查问该文档调用某个接口。相当于,咱们从swagger-ui上摘录接口应用办法,设想大家在开发过程中是否遇到过以下问题:

  1. 调用接口发现接口报404,费神费劲查看发现把单词拼错了~
  2. 调用接口发现接口报400,认真比照swagger发现参数类型写错、参数名称写错~
  3. 一时粗心把申请类型写错了~

如果有10位开发同学调用过同一个接口,上述的犯错情景的次数会被放大10倍,重大节约前端的开发工夫。如果后盾须要批改某一个接口,他可能要告诉10个前端,或者某些情景下不敢批改该接口。因而咱们要将这些变动、机械抄录的内容隔离在Service文件中。

主动感知接口

如果须要手动抄录swagger接口文件并保留在前端,这无疑是一个既无聊干燥又无人愿意的"dirty work",而auto-swagger正是为了解决这种状况而呈现的,应用auto-swagger你能够在几秒内获取到全副的接口文件,而后盾接口变动时,咱们又能够很及时感知到接口产生了变动。