开源项目
bit-framework:把游戏框架拆成按需安装的模块
基于 pnpm Monorepo 的 Cocos Creator 3.x 游戏框架集合,拆成 12 个独立模块按需安装,覆盖 UI、ECS、网络、资源、热更新全流程。
bit-framework:把游戏框架拆成按需安装的模块
为什么要重新做一遍
我之前维护过一个叫 kunpocc 的框架,UI 管理、平台适配、计时器、条件系统等功能全塞在一个包里。刚开始用着挺爽,装一个包什么都有。但用久了问题就冒出来了:
有的项目只想要个网络库,结果因为依赖了 kunpocc 主包,把 UI 系统、热更新那一堆代码也一起打进去了。想升级某个模块的一个小 bug,整个框架的版本号跟着往上跳,其他没改动的功能也要跟着走一遍回归测试。想单独维护 ECS 这部分逻辑,翻源码的时候还要绕开一堆不相关的目录。
说白了,单体框架在项目小的时候是效率,项目一多、维护周期一长,就变成了负担。所以这次没有缝缝补补,直接推翻重做:bit-framework,一个 pnpm Monorepo,把原来揉在一起的功能拆成 12 个完全独立的包,各自发版本、各自管依赖,你的项目需要什么就装什么。
是什么
bit-framework 是基于 Cocos Creator 3.x 的游戏开发框架集合,用 pnpm workspace 统一管理源码,但每个模块单独发到 npm,命名空间是 @gongxh/bit-xxx。12 个模块按功能分成 5 类:
| 分类 | 模块 | 一句话 |
|---|---|---|
| 核心 | bit-core | 时间、定时器、平台检测、屏幕适配等基础工具 |
| UI | bit-ui | 基于 FairyGUI 的窗口管理系统 |
| UI | bit-condition | 条件显示系统,做红点、解锁提示 |
| 游戏架构 | bit-ecs | 高性能 ECS 架构 |
| 游戏架构 | bit-ec | 面向 Cocos 场景的轻量 EC 架构 |
| 游戏架构 | bit-event | 全局事件系统 |
| 网络与资源 | bit-net | HTTP + WebSocket 跨平台网络库 |
| 网络与资源 | bit-assets | 资源加载管理,按批次卸载 |
| 网络与资源 | bit-hotupdate | 热更新系统封装 |
| 工具 | bit-quadtree | 四叉树空间索引,做碰撞检测 |
| 工具 | bit-behaviortree | 行为树,做游戏 AI |
| 工具 | bit-minigame | 微信/支付宝/字节跳动小游戏平台适配 |
每个模块都可以单独安装、单独使用,互相之间没有强制绑定。
怎么设计的
拆模块最容易踩的坑是拆着拆着又变成一堆互相纠缠的小单体,所以这次定了几条硬规矩:
单向依赖,禁止循环。模块之间只允许单向引用,比如 bit-ui 依赖 bit-core,但 bit-core 绝对不会反过来依赖 bit-ui。真的需要双向通信的场景(比如 UI 层要感知业务层的状态变化),走 bit-event 广播,不走模块间直接调用。
该依赖的东西交给 peer dependency,由使用方的项目自己装,保证全项目只有一份实例。比如 bit-ui 需要 bit-core 和 @gongxh/fairygui-cc,但这两个包不会被 bit-ui 自己打进去,而是声明成 peer 依赖:
npm install @gongxh/bit-ui @gongxh/bit-core @gongxh/fairygui-cc
依赖关系整体是这样的:
bit-core ←── bit-ui / bit-condition / bit-minigame / bit-hotupdate
bit-net ←── bit-hotupdate
bit-event ←── bit-ec
bit-ecs / bit-assets / bit-quadtree / bit-behaviortree 完全独立,零依赖
也就是说,如果你只想要一个四叉树碰撞检测,或者只想要个行为树做 AI,装一个包就够了,不会因此把整套 UI 系统也带进项目。
怎么用
方式一:在你的 Cocos Creator 项目里按需装(推荐)
# 只要核心工具
npm install @gongxh/bit-core
# UI 系统(peer 依赖要一起装)
npm install @gongxh/bit-ui @gongxh/bit-core @gongxh/fairygui-cc
# 一次装个常用组合
npm install @gongxh/bit-core @gongxh/bit-ui @gongxh/bit-event @gongxh/bit-net @gongxh/fairygui-cc
方式二:本地开发/参与贡献
git clone --recurse-submodules https://github.com/gongxh0901/bit-framework.git
cd bit-framework
pnpm install
pnpm build
用 pnpm 而不是 npm/yarn,主要是看中它的硬链接省磁盘、依赖管理更严格、原生支持 workspace,几个包一起改动的时候体验明显更顺。
技术栈
TypeScript 5.x 开发,Rollup 打包,每个模块的 dist/ 下都会产出 ESM、CommonJS 和压缩版,外加完整的 .d.ts 类型定义。装饰器用得比较多(experimentalDecorators),UI、ECS、EC、条件系统都是靠装饰器注册类的。Cocos Creator 版本要求 3.7.0+,日常开发用的是 3.8.x。
后续会写什么
这篇是全局导览,接下来会给每个模块单独写一篇,讲清楚它解决什么问题、核心 API 怎么用、有哪些坑要避开。如果你只关心某一块功能,可以直接跳过去看对应模块的文章。
项目信息
- GitHub: https://github.com/gongxh0901/bit-framework
- 许可证: MIT License
- 作者: bit老宫 (gongxh)
(下面各模块文章中的仓库链接会指向对应子目录,方便直接跳转看源码。)
欢迎按需取用,也欢迎提 Issue 和 PR。