博客项目开发笔记 1——技术选型

今天解决了 mdx 的依赖问题,考虑可以正式开始设计和编写博客项目了,再次重申,写博客既是增长项目经验,也是熟悉 js 全栈,更是作为我的门面

为了尽可能考虑到接触到 js 全栈,该项目应当从视图层到持久层均具备,也就是说需要有后端,其中应当分离业务 model 到独立项目供前后端共用。

该项目也是进行阶段性演进,首先完成带后端的博客最主要的功能,即查看文章评论,以及文章管理的功能(需要有一个后台界面去管理乃至编写文章),然后再完成 tag,category,查询文章,统计等功能……前端考虑能支持主题的切换。

前后端均使用 typescript,前端使用 React 框架以及 charkaUI 框架,其中前后端交互使用 useHttpRequest Hook;后端使用 Nestjs 作为 web 框架,Prisma 作为 ORM 框架(之后一定有鉴权需要,考虑选择一个 OAuth2 框架)。

后端的选择有一些考量,虽然在远程工作中 express 仍旧吃香,但express实在太过底层,需要造一堆轮子,而我希望能尽快出结果,因此选择抽象程度更高的Nestjs(学习和使用 express 仍旧是必要的);ORM 框架本打算使用 typeORM,它更轻量和容易理解,但和 typescript 的 strict 模式不兼容(!!),于是考虑直接上手最酷炫的 prisma 框架,之后对其需要专门学习。

数据库使用 mysql,之后若有需要可能再加上 redis 做缓存?

另外,该博客使用的标记语言我选择 mdx,其结合 md 和 jsx,能通过 jsx 对 md 进行扩展,但若前后端分离的话,后端的 mdx 如何获取到它依赖的组件便成为一个大问题,好在这里找到一个合适的 项目 能将 mdx 连带依赖进行打包。这虽然会增大文章的体积,但由于是后端进行编译的,因此问题并不大。但这个框架仍旧有一些问题需要研究,比如其能否获取 React 的 Context 之类的,该问题对组件的编写十分重要,如果要获取一些全局状态如是否是黑暗模式等,但这也考虑从另外的方式去操作,比如去添加事件,把相应状态维护在全局变量,通过hook的形式去提供给组件。

然后,考虑到微服务的需要,项目后端应当无状态

因此,第一阶段的任务可以归结如下:

  1. 学习 NestJs 以及最佳实践
  2. 学习 TypeORM
  3. 对 mdx,组件进行建模,实现相应 CRUD 接口以及业务操作
  4. 实现前端相应界面,其中后台界面先只考虑检查 mdx 和组件是否能正确编译,先不考虑预览等问题;其中文章页面先不考虑任何样式,实现最简单的即可。
  5. 迁移已有文章到该项目

前端项目在 ,后端项目在 ,model 项目在


本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 协议 ,转载请注明出处!