如何实现模块化加载的前端和后端代码
https://www.zhihu.com/question/1939240613842228669
https://www.v2ex.com/t/1152245#reply0
首先我定义一下我这里的模块概念:一个文件夹下的代码(也就是前端的话可能涉及多个页面以及组件等,后端同理)
其实如果只是追求打包时动态加载不同的模块是很简单的,通过环境变量约束一下打包工具即可
但我还想要有强类型支持,以及直接剪切文件夹就能新增和移除模块。
架构畅想
2.
每个顶级模块(包)都可能包含一个后端模块和一个前端模块(也就是可以是单纯的前端模块或后端模块)
3.
存在一个基座包,这是整个项目的核心,所有的其他包都会依赖这个
4.
非基座包的后端模块和前端模块都能直接引用到基座包中的后端依赖和前端依赖,而不需要特别专门的配置
5.
同一个包内的前端模块可以直接引用到后端模块的api(强类型)以及其他包的后端模块的api
6.
所有包的后端模块都能直接声明需要的context,然后编译时能够感知到基座包是否兜底的提供了所有context(即编译时能够报错某个 context 缺失)
1.
为什么基座包需要兜底:因为是从基座包启动的 http server,他是入口也是出口
7.
可以直接剪切文件夹就能新增包和移除包,如果包之间有依赖但对应的包被移除了则编译时应该报错
如何实现?
感觉 https://turborepo.com/ 可能会对这种monorepo的构建有帮助
我不想改配置,所以我需要实现,copy 一个模块的文件夹进来(包含了对应模块的前端和后端代码)然后直接就能运行项目,前端路由这块我已经实现可以这样加载了,但是后端还没搞定,主要是我想要 ts 类型严谨,否则我直接 require 也能实现
我会有一个环境变量文件的,比如 用户 a.env 的是包含了模块 a 模块 b ,那么我的脚本打包的时候就只包含这两,也有脚本一键导出只包含这两模块的源码发给他(有很多用户就是想要源码,我提供源码也可以跟他要价更高一些)
不使用 git 分支管理不同用户(因为我在实现某个用户的功能的时候可能又改善了某些通用模块,那么我不停切换分支来修改合并代码太麻烦了)