{"id":14963968,"url":"https://github.com/ailhc/easygameframeworkopen","last_synced_at":"2025-04-04T15:05:06.447Z","repository":{"id":40658012,"uuid":"315988336","full_name":"AILHC/EasyGameFrameworkOpen","owner":"AILHC","description":"基于Typescript的渐进式通用游戏前端开发框架","archived":false,"fork":false,"pushed_at":"2024-04-11T06:54:36.000Z","size":34743,"stargazers_count":310,"open_issues_count":4,"forks_count":95,"subscribers_count":12,"default_branch":"main","last_synced_at":"2025-04-04T14:52:40.845Z","etag":null,"topics":["broadcast","cocos","cocos-creator","easy-to-use","egf","egret","framework","game-dev","laya","lerna","monorepo","monorepo-lerna","phaser","pixijs","rollup","typescript","yarn"],"latest_commit_sha":null,"homepage":"https://ailhc.github.io/EasyGameFrameworkOpen","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AILHC.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-11-25T16:01:19.000Z","updated_at":"2025-04-03T06:21:51.000Z","dependencies_parsed_at":"2024-06-20T22:09:45.468Z","dependency_job_id":null,"html_url":"https://github.com/AILHC/EasyGameFrameworkOpen","commit_stats":{"total_commits":512,"total_committers":2,"mean_commits":256.0,"dds":0.001953125,"last_synced_commit":"6420639ebfacc7fe04fb2ca5fab42fdac701a7fe"},"previous_names":[],"tags_count":323,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AILHC%2FEasyGameFrameworkOpen","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AILHC%2FEasyGameFrameworkOpen/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AILHC%2FEasyGameFrameworkOpen/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AILHC%2FEasyGameFrameworkOpen/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AILHC","download_url":"https://codeload.github.com/AILHC/EasyGameFrameworkOpen/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247198446,"owners_count":20900079,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["broadcast","cocos","cocos-creator","easy-to-use","egf","egret","framework","game-dev","laya","lerna","monorepo","monorepo-lerna","phaser","pixijs","rollup","typescript","yarn"],"created_at":"2024-09-24T13:32:24.417Z","updated_at":"2025-04-04T15:05:06.422Z","avatar_url":"https://github.com/AILHC.png","language":"TypeScript","readme":"# EasyGameFramework\n\n![LICENSE](https://img.shields.io/github/license/JoeyBling/hexo-theme-yilia-plus \"LICENSE\")\n![Author](https://img.shields.io/badge/Author-AILHC-red.svg \"Author\")\n\n[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/AILHC/EasyGameFrameworkOpen)\n\n[![ReadCodeIn1s](https://img.shields.io/badge/ReadCode-In1S-blue.svg)](https://github1s.com/AILHC/EasyGameFrameworkOpen)\n\n\u003c!-- [![Gitpod Ready-to-Code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/AILHC/EasyGameFrameworkOpen) --\u003e\n![玩转游戏开发-brightgreen.svg](https://img.shields.io/badge/%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7-%E7%8E%A9%E8%BD%AC%E6%B8%B8%E6%88%8F%E5%BC%80%E5%8F%91-brightgreen.svg)\n\n基于Typescript的渐进式通用游戏前端开发框架\n\nA progressive universal game front-end development framework based on [Typescript](https://www.tslang.cn/)\n\n## 名词解释\n\n**Easy**\n\n用这个框架开发会是很容易很轻松很舒服的。\n\n**Evolutionary(渐进式)**\n\n用这个框架可以让我循序渐进的开发，而不是一上来就给我整一大套东西。在我有需要时就模块库取或者自己开发。\n\n**General(通用)**\n\n国内的游戏引擎有3个：\n* [CocosCreator](https://www.cocos.com/products#CocosCreator)\n* [Laya](https://www.layabox.com/)\n* [Egret](https://egret.com/products)\n\n其他不太常用的有很多\n* [PIXI.js](https://www.pixijs.com/)\n* [Phaser](http://phaser.io/)\n* ...\n\n\n各有优势，看项目和团队进行技术选型。\n\n我想这个框架可以不受限于引擎，适用于各种项目，不必因为换引擎而重复造🚗子。\n\n\n关于框架这个话题我写了几篇文章(感兴趣可以看一下)\n\n* [为什么写框架](https://pgd.vercel.app/2020/11/17/The-Birth-of-Frames-Zero%EF%BC%9AWhy-write-framework/)\n* [我想要的框架](https://pgd.vercel.app/2020/11/29/The-Birth-of-a-Framework-One-The-Framework-I-Want/)\n* [定位](https://pgd.vercel.app/2020/12/02/The-birth-of-the-framework-two-positioning/)\n\n## 文档网址\n    \n* [Github上](https://ailhc.github.io/EasyGameFrameworkOpen/#/)\n* [Gitee上](https://aigamehome.gitee.io/easygameframeworkopen/#/)\n\n## 在线示例\n\n* [Creator2.x主要模块例子演示Gitee](https://aigamehome.gitee.io/easygameframeworkopen/examples/egf-ccc-full/web-desktop)\n* [Creator3.x主要模块例子演示Gitee](https://aigamehome.gitee.io/easygameframeworkopen/examples/egf-ccc3-full/web-desktop)\n\n* [Creator2.x主要模块例子演示GitHub](https://ailhc.github.io/EasyGameFrameworkOpen/examples/egf-ccc-full/web-desktop)\n* [Creator3.x主要模块例子演示GitHub](https://ailhc.github.io/EasyGameFrameworkOpen/examples/egf-ccc3-full/web-desktop)\n## Modules(模块)\n\n### Core\n\n💗**模块管理器**\n\n框架的核心模块是一个极简强大的模块管理器，可以轻松接入任何TS/JS项目\n\n「传送门」:[egf-core](./packages/core/README.md)\n\n📦**构建工具**\n\n框架的核心工具是一个基于rollup的开箱即用的模块构建工具，可以构建出各种模块规范的js+单.d.ts\n\n同时支持监视开发模式哦\n\n「传送门」:[egf-cli](./packages/cli/README.md)\n\n### 🌈UIFramework \n\n    一个基于TypeScript的零依赖、跨引擎、高效、灵活、高可扩展的显示控制库(UI框架库)\n\n「传送门」:[display-ctrl](https://github.com/AILHC/EasyGameFrameworkOpen/tree/main/packages/display-ctrl)\n\n在仓库中同时提供了基于CocosCreator2.4.2和CocosCreator3D实现的库(包含layer层级管理库的实现),以及与[FairyGUI](https://www.fairygui.com/)相关的2.x实现和3.x实现\n1. [dpctrl-ccc](https://github.com/AILHC/EasyGameFrameworkOpen/tree/main/packages/dpctrl-ccc)\n2. [dpctrl-c3d](https://github.com/AILHC/EasyGameFrameworkOpen/tree/main/packages/dpctrl-c3d)\n3. [dpctrl-fgui](https://github.com/AILHC/EasyGameFrameworkOpen/tree/main/packages/dpctrl-fgui) 适用于Creator2.x上的fgui适配，同时也适用于Laya、Egret等\n4. [dpctrl-fguicc](https://github.com/AILHC/EasyGameFrameworkOpen/tree/main/packages/dpctrl-fguicc) 3.x上的fgui适配\n\n### 🤙🤳🏾 Broadcast\n    一个基于TypeScript的一套高效灵活的广播系统，可以帮助开发者轻松、有序的构建具有极具复杂性的关联交互和状态变化的游戏和应用。\n**特性**\n- 基础事件机制的支持\n- 消息支持携带任意类型的数据(并有类型提示)\n- 支持函数this绑定或任意类型作为环境，一行代码就可以移除环境内所有的接收者\n- 易于构建局部/全局的状态管理\n- 支持双向通信\n- 支持不可思议的粘性广播\n- 基于TypeScript并提供极度舒适的类型提示\n\n「传送门」:[broadcast](./packages/broadcast/README.md)\n\n\n\n### 🌐NetworkFramework\n\n    一个基于TypeScript的零依赖、跨平台、灵活、高可扩展的网络库\n\n**特性**\n\n1. 跨平台:适用于任意ts/js项目\n2. 灵活、高可扩展:可以根据项目需要进行多层次定制\n3. 零依赖\n4. 强类型:基于TypeScript\n5. 功能强大:提供完整的基本实现:握手、心跳、重连\n6. 可靠:完善的单元测试\n\n「传送门」:[enet](./packages/enet/README.md)\n\n### 🕳️ ObjectPoolManager\n\n    一个通用的对象池管理模块，简单易用。\n\n**特性**\n1. 全局管理多个对象池\n2. 对象无需实现对象池对象接口也可进行获取和回收处理\n3. 简洁可扩展的API\n4. 智能类型提示\n   \n「传送门」:[obj-pool](./packages/obj-pool/README.md)\n\n### 🥪LayerManager\n\n    通用层级管理模块，简单易用，对业务层透明。\n\n「传送门」:[layer](./packages/layer/README.md)\n\n\n## Demos(示例)\n\n框架提供大部分模块的Demo示例供参考\n「传送门」:[examples](https://github.com/AILHC/EasyGameFrameworkOpen/tree/main/examples)\n## Development Env(开发环境)\n\n这是一个monorepo式的项目仓库，使用这种方式可以很好的管理多模块项目\n\n### Use Tools\n\n* [Lerna](https://lerna.js.org/) \n    \u003e Lerna是一种`monorepo`管理工具，可以优化使用`git`和`npm`管理多包存储库的工作流程。\n\n* [Pnpm](https://www.pnpm.cn/)\n    \u003e 最快最稳的`nodejs`包管理工具 墙裂推荐\n    \u003e 更加适合在基于`monorepo`的`CocosCreator`项目中使用的`nodejs`管理工具\n* 为什么从`Lerna+Yarn` 切换为 `Pnpm + Lerna`\n\n    Yarn 安装包的方式，是扁平化，多个包依赖的包被安装到顶层的`node_modules`。\n\n    这样会导致某个包没有依赖顶层`node_modules`的包，也能引用并调用。\n\n    后果就是，依赖关系不准确，暗藏依赖，在协作时可能会出问题。\n\n    而且`CocosCreator3.x`项目会识别错误，导致报找不到某某依赖的错。\n\n    另外一方面，使用感受上，`Yarn+Lerna`很难用，安装速度慢，偶尔会出点问题。而`Pnpm`则非常舒服\n### Reference(参考资料)\n1. [Pnpm 中文网](https://www.pnpm.cn/)\n2. [Pnpm: 最先进的包管理工具](https://zhuanlan.zhihu.com/p/404784010)\n3. [为什么使用pnpm可以光速建立好用的monorepo（比yarn/lerna效率高）](https://blog.csdn.net/qq_21567385/article/details/118590143)\n\n### Pnpm WorkSpace 配置\n0. 安装`Pnpm`\n\n    ```bash\n    npm i pnpm -g\n    ```\n\n1. 创建`pnpm-workspace.yaml`\n\n    ```yaml\n    packages:\n    # all packages in subdirs of packages/ and components/\n    - 'packages/**'\n    - 'tool-packages/**'\n    - 'transed-packages/**'\n    - 'examples/**'\n    # exclude packages that are inside test directories\n    - '!**/test/**'\n    ```\n2. 兼容处理\n因为很多项目(包括`CocosCreator`)，并不兼容下面这种包引用(protocol)\n\n    ```json\n        {\n            \"dependencies\": {\n                \"foo\": \"workspace:*\",\n                \"bar\": \"workspace:~\",\n                \"qar\": \"workspace:^\",\n                \"zoo\": \"workspace:^1.5.0\"\n            }\n        }\n    ```\n    a. 需要创建一个`.npmrc`文件\n\n    ```yaml\n\n    save-workspace-protocol = false\n\n    ```\n3. 初始化安装\n如果旧项目，可能需要删除掉所有的`node_modules`\n之前用`lerna+yarn`的，则可以使用`lerna clean`\n然后\n    ```bash\n    pnpm install\n    ```\n\n\n### Basic Commands\n\n**创建包**\n1. 快速模式\n    ```bash\n    lerna create @xxx/xxx -y\n    ```\n2. 配置模式\n   ```bash\n    lerna create @xxx/xxx\n   ```\n**给包添加依赖**\n\n* 给指定包添加内部包依赖\n    ```bash\n    pnpm add @xxx/xxx\n    ```\n* 给指定包添加开发时内部包依赖\n    ```bash\n    pnpm add -D @xxx/b\n    ```\n* 给指定包添加外部包依赖(在指定包目录下)\n    \n    ```bash\n    pnpm add xxxx\n    ```\n* 给指定包添加开发时外部包依赖(在指定包目录下)\n    ```bash\n    pnpm add xxxx -D\n    ```\n* 给所有包添加依赖(可以使用pnpm过滤，使用参考:https://www.pnpm.cn/filtering)\n    ```bash\n    pnpm add lodash --filter \"@ailhc/*\"\n    ```\n* 给所有包添加开发时依赖(如果是添加内部包，需要加版本号@0.0.x)\n    ```bash\n    pnpm add lodash -D --filter \"@ailhc/*\"\n    ```\n**移除依赖**\n* 移除指定包a对xxx包的依赖(到指定包目录下，也可使用--filter)\n    ```bash\n    pnpm remove xxx \n    ```\n    使用fliter\n    ```bash\n    pnpm remove xxx --filter \"a\"\n    ```\n* 移除所有包对指定包xxx的依赖(可以使用pnpm filter 过滤)\n    ```bash\n    pnpm remove xxx --filter \"@ailhc/*\"\n    ```\n* 移除根目录下对xxx包的依赖\n    ```bash\n    pnpm remove xxx\n    ```\n* 安装所有依赖\n    ```bash\n    pnpm install\n    ```\n* 清除所有依赖\n    ```bash\n    lerna clean\n    ```\n### Version(版本发布)\n    lerna version\n    会遍历所有包，检查修改，然后更新包的版本号，以及自动修改引用的包的引用版本号\n    \n    生成一个提交，一个tag，以及推送到远程仓库\n    \n    比如 packageA 修改了，版本号从1.0.0变成了1.0.1\n    \n    然后引用了packageA的packageB、C的版本号也要递增，以及引用的packageA的版本号也要从1.0.0变成1.0.1\n\n### Used by other projects(仓库外的开发项目使用模块)\n1. 使用npm link 或 yarn link将指定包链接到全局\n\n    ```bash\n    cd packages/core\n    npm link\n    ```\n\n2. 到项目里创建链接(这个@egf/core是包名)\n    \n    ```bash\n    cd cocos-example\n    npm link @egf/core\n    ```\n\n## Who am I?\n\n**游戏开发之路有趣但不易,**\n\n**玩起来才能一直热情洋溢。**\n\n\n关注我, 一起玩转游戏开发！\n\n在这游戏开发的道路上并肩前行\n\n你的关注是我持续更新的动力~\n\n在以下这些渠道可以找到我和我的分享和创作:\n\n搜索关注:玩转游戏开发\n\n或扫码:\u003cimg src=\"https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/abd0c14c9c954e56af20adb71fa00da9~tplv-k3u1fbpfcp-zoom-1.image\" alt=\"img\" style=\"zoom:50%;\" /\u003e\n\n\n\n一起讨论技术的 QQ 群: 1103157878\n\n博客主页: https://pgd.vercel.app/\n\n掘金: https://juejin.cn/user/3069492195769469\n\ngithub: https://github.com/AILHC\n\n\n\n\n\n\n\n\n\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Failhc%2Feasygameframeworkopen","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Failhc%2Feasygameframeworkopen","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Failhc%2Feasygameframeworkopen/lists"}