下载 App

文件拆分助手

05/1228 浏览开发交流
---
name: 文件拆分助手
updated: "2026-04-30 23:00:00"
version: "1.0"
description: |
  文件拆分全流程助手。超标巡检→拆分建议→骨架生成→流程引导→验证→经验沉淀→经验吸收,
  形成"发现→执行→沉淀→吸收"闭环。基于 16 次实战拆分经验(6fbf048→4c73008)。
  MUST trigger when: (1) 拆分、split、模块拆分,
  (2) 文件太大、太长、超800行、行数超标,
  (3) 代码瘦身、文件瘦身,
  (4) 巡检行数、检查行数,
  (5) 用户问"哪些文件需要拆分"
---
# 文件拆分助手
> 发现→执行→沉淀→吸收 闭环。不只是文档,是可执行的工作流。
---
## 1. 触发条件
| 触发词 | 激活功能 |
|--------|---------|
| 拆分、split、模块拆分 | 完整拆分流程(§4) |
| 文件太大、太长、超800行、行数超标 | 超标巡检(§3) |
| 代码瘦身、文件瘦身 | 超标巡检 + 拆分建议(§3+§4) |
| 巡检行数、检查行数 | 仅超标巡检(§3) |
| 哪些文件需要拆分 | 超标巡检(§3) |
---
## 2. 经验吸收(拆分前自动执行)
**目的**:开始拆分前,自动加载历史经验,避免重蹈覆辙。
### 2.1 自动加载步骤
```
① 读取 docs/1知识库/技术总结/文件拆分经验总结.md(完整经验库)
② 读取复用手册 14.4(coordinator 模式 + 检查清单 + 陷阱表)
③ 读取 git log --oneline --grep="拆分" -10(最近 10 次拆分提交)
④ 从 ③ 中提取模式:哪些文件拆过、用了什么边界、行数结果
⑤ 检查 bug-guards/module-split-guard(防御规则)
```
### 2.2 经验摘要输出
加载后,向用户输出一段简要摘要:
```
【拆分经验加载完成】
- 历史拆分: N 个文件,成功率 100%
- 标准模式: coordinator + init(deps) 依赖注入
- 高频陷阱: G延迟绑定 / 循环依赖 / 输入双端同步 / 导出遗漏 / require不完整
- 防御规则: module-split-guard 已加载(10 条规则)
```
---
## 3. 超标巡检(自动发现)
**目的**:扫描所有文件,列出超标和接近超标的文件。
### 3.1 巡检命令
```bash
# 扫描 scripts/ 下所有 .lua 文件行数,排除数据文件
find /workspace/scripts -name "*.lua" \
  ! -name "er_seed_*" \
  ! -name "*_data.lua" \
  ! -path "*/data/*" \
  -exec wc -l {} + | sort -rn | head -30
```
### 3.2 分级报告
| 级别 | 行数范围 | 标记 | 动作 |
|------|---------|------|------|
| 超标 | >800 | 🔴 | **必须拆分** |
| 预警 | 601-800 | 🟡 | 建议拆分 |
| 舒适 | ≤600 | 🟢 | 无需处理 |
### 3.3 排除规则
以下文件不计入巡检:
- `er_seed_*.lua`(自动生成的种子数据)
- `*_data.lua`(纯数据定义,拆分无意义)
- `scripts/data/` 目录下的文件
- 已知跳过的文件(如 panel_input_registrations.lua,需注释原因)
### 3.4 巡检结果模板
```
【行数巡检报告】
🔴 超标(必须拆分):
  - xxx.lua: 1234 行(超标 434 行)
🟡 预警(建议拆分):
  - yyy.lua: 750 行(距上限 50 行)
🟢 舒适区: 其余 N 个文件均 ≤600 行
上次巡检: YYYY-MM-DD
```
---
## 4. 拆分流程引导(核心流程)
### 4.1 阶段一:分析(必做)
```
① 读完整文件,统计总行数
② 列出所有函数及行数:
   grep -n "^function\|^local function" scripts/xxx.lua
③ 识别拆分边界(按安全性选择):
   | 优先级 | 边界类型 | 安全性 | 子模块命名 |
   |--------|---------|--------|-----------|
   | 1 | 纯数据 | ★★★★★ | xxx_data.lua |
   | 2 | 绘制层 | ★★★★☆ | xxx_draw.lua |
   | 3 | 输入层 | ★★★☆☆ | xxx_input.lua |
   | 4 | 逻辑子系统 | ★★★☆☆ | xxx_ai/events.lua |
   | 5 | 混合依赖 | ★★☆☆☆ | 需 parentM 模式 |
④ 列出依赖清单:
   - require 了哪些模块?
   - 访问了哪些 G 表字段?
   - init() 注入了哪些依赖?
   - 哪些函数被外部调用?(grep 函数名)
⑤ 输出拆分方案给用户确认:
   - 哪些函数留在 coordinator
   - 哪些函数提取到子模块
   - 预估拆分后行数
```
### 4.2 阶段二:骨架生成
**确认方案后,自动生成代码骨架:**
#### Coordinator 骨架
```lua
-- xxx.lua(coordinator)
local M = {}
-- 子模块
local SUB = require("xxx_sub")
-- coordinator 自有依赖(只留自己需要的)
local Config = require "Config"
-- 延迟绑定
local G
local function ensureDeps()
    if not G then G = _G.G end
end
function M.init(deps)
    G = deps.G
    SUB.init({ parentM = M, G = G })
end
-- === 状态管理(留在 coordinator) ===
-- === 分派(调子模块) ===
function M.Draw(ctx, w, h)
    ensureDeps()
    SUB.init({ parentM = M, G = G })  -- 刷新 G 引用
    SUB.draw(ctx, w, h)
end
-- === 对外接口(重新导出) ===
M.HitTest = SUB.HitTest
M.HandleAction = SUB.HandleAction
return M
```
#### 子模块骨架
```lua
-- xxx_sub.lua(子模块)
local M = {}
-- 自有依赖
local C = require "colors"
local FS = require "font_sizes"
local LS = require "layout_sizes"
local Logger = require "logger"
local log = Logger.new("XxxSub")
-- 注入依赖
local G, parentM
function M.init(deps)
    if deps.G then G = deps.G end
    if deps.parentM then parentM = deps.parentM end
end
-- === 从 coordinator 提取的函数 ===
-- (在此处粘贴,去掉下划线前缀)
return M
```
### 4.3 阶段三:执行拆分
```
① 将函数从 coordinator 剪切到子模块
② 函数重命名:M._drawXxx → M.drawXxx
③ coordinator 精简 require 列表
④ coordinator 添加子模块 require + init
⑤ coordinator 修改分派逻辑
⑥ 验证行数:两个文件都 ≤600
```
### 4.4 阶段四:验证(必做)
```bash
# 1. 被拆函数名检查(确认无遗漏调用)
grep -rn "被拆函数名" scripts/ --include="*.lua"
# 2. 行数验证
wc -l scripts/xxx.lua scripts/xxx_sub.lua
# 3. 构建验证
# → 调用 build 工具
# 4. 运行时日志检查
# → 查看 /opt/log/dev/user_script.log
```
### 4.5 阶段五:提交
```bash
git add scripts/xxx.lua scripts/xxx_sub.lua
git commit -m "拆分:xxx.lua(原行数→coordinator行数+子模块行数)"
```
---
## 5. 经验沉淀(拆分后自动执行)
**目的**:每次拆分完成后,自动将本次经验回填到知识库,形成持续积累。
### 5.1 沉淀触发条件
拆分提交成功后,**自动执行**以下步骤(不需要用户提醒):
### 5.2 沉淀内容
#### ① 更新经验总结文档
在 `docs/1知识库/技术总结/文件拆分经验总结.md` 的统计数据表中更新数字:
```
总文件数 → +1
新增子模块 → +N
```
#### ② 如果发现新陷阱,追加到陷阱表
在经验总结的"四、关键陷阱与防范"章节追加新条目:
```markdown
### 4.X 新陷阱名称
**现象**:描述
**根因**:描述
**解决**:描述
```
#### ③ 如果发现新模式,回填到复用手册
在复用手册 14.4 章节追加新的子章节。
#### ④ 如果触发了 bug-guard,更新 module-split-guard
在 `~/.claude/skills/bug-guards/module-split-guard/SKILL.md` 追加新规则。
### 5.3 沉淀检查清单
```
□ 经验总结统计数据已更新
□ 新陷阱已追加(如有)
□ 新模式已回填复用手册(如有)
□ module-split-guard 已更新(如触发了新 bug)
□ 经验沉淀已单独 commit
```
### 5.4 沉淀提交格式
```bash
git commit -m "经验沉淀:拆分 xxx.lua 经验回填(新陷阱/新模式/统计更新)"
```
---
## 6. 批量拆分模式
**当多个文件需要拆分时,使用批次规划:**
### 6.1 批次规划原则
```
① 按风险排序:纯数据 → 绘制层 → 输入层 → 逻辑层
② 每批次内文件无依赖关系(可独立拆分)
③ 每批次完成后构建验证 + commit
④ 批次间如果发现新经验,立即沉淀(不等全部完成)
```
### 6.2 批量拆分方案模板
```markdown
## 批量拆分方案
### 超标文件清单(共 N 个)
| # | 文件 | 行数 | 超标量 | 拆分边界 | 难度 | 批次 |
|---|------|------|--------|---------|------|------|
| 1 | xxx.lua | 1234 | +434 | 绘制层 | 低 | 第一批 |
### 批次安排
| 批次 | 文件数 | 策略 | 预期风险 |
|------|--------|------|---------|
| 第一批 | N | 纯数据/绘制 | 低 |
### 拆分原则
1. coordinator 模式 + init(deps) 依赖注入
2. 外部调用者零改动
3. 每文件两个产物都 ≤600 行(G2 舒适线)
```
---
## 7. 定期巡检机制
**目的**:防止新代码悄悄膨胀超标。
### 7.1 巡检时机
| 时机 | 触发方式 |
|------|---------|
| 收工时 | 收工 skill 中加入行数快检 |
| 用户说"巡检" | P35 触发词匹配 |
| 大功能完成后 | 主动检查新增/修改文件行数 |
### 7.2 快检命令(收工时用)
```bash
# 快速检查是否有新超标文件(排除数据文件,只看 >700 行的)
find /workspace/scripts -name "*.lua" \
  ! -name "er_seed_*" ! -name "*_data.lua" ! -path "*/data/*" \
  -exec wc -l {} + | awk '$1 > 700' | sort -rn
```
输出为空 = 无预警,可跳过。有输出 = 列出文件,提醒用户。
### 7.3 巡检结果记录
如果发现新超标文件,在巡检报告末尾追加:
```
⚠️ 新增预警: xxx.lua (750行),建议下次迭代时拆分
```
---
## 8. 与其他 Skill 的联动
| Skill | 联动方式 |
|-------|---------|
| **module-split-guard** | 拆分执行时自动加载防御规则 |
| **行数守卫** | 巡检时检查是否有新超标文件 |
| **收工写记忆** | 收工时执行快检,发现超标文件记入 pipeline.json 的 likely_next_task |
| **代码复用守卫** | 拆分前检查是否有可复用的已拆模式 |
| **审查官** | 拆分完成后可选轻审验证质量 |
---
## 9. 完整工作流速览
```
触发(P35 匹配触发词)
  ↓
经验吸收(§2:读经验库 + git 历史 + bug-guard)
  ↓
超标巡检(§3:扫描文件 → 分级报告)
  ↓
拆分流程(§4:分析 → 骨架生成 → 执行 → 验证 → 提交)
  ↓
经验沉淀(§5:更新经验库 + 回填复用手册 + 更新 guard)
  ↓
闭环完成
```
**每一步都是自动的,不需要用户提醒。**
别再烧积分了!从每次 2000 到每次 50 的血泪经验截图
别再烧积分了!从每次 2000 到每次 50 的血泪经验
适用场景:所有在用 TapTap Code 开发游戏的小白 难度:★☆☆☆☆ 背景最近群里总有人"炫耀"一次操作花了几千积分,说实话这不是值得高兴的事——这是在告诉所有人你的开发方式有根本性问题。我也走过这条弯路,所以来说说怎么改。 积分消耗的本质是什么积分 = AI 处理的 token 数量 = 你发给 AI 的内容 + AI 回给你的内容所以烧积分的本质只有两种: 你让 AI 做了大量无效/重
精华
68 赞
21 回复
03:06
为了不被斩杀,我只能做到这些了截图
为了不被斩杀,我只能做到这些了
之前一直申请不到计划3,之前说太花哨,后面说体量完成度不足,在我一番小作文下,编辑终于给了我解答,什么原生质感,玩家开局体验啥的。 本来计划2也够用,准备以后再优化了,结果计划2赠送的积分要砍半了,学生党实在消费不起,于是只能再冲一波计划3了 从周六中午到现在一天半时间,优化了一遍角色卡,战斗卡,还有抽卡界面,优化了新手教程,该说不说确实比之前要舒服些。 前半部分为新版,后半部分为旧版。 明天再次
40 赞
6 回复
如何提升你游戏中的UI美术水平截图
如何提升你游戏中的UI美术水平
一、请为你的游戏挑选一款合适的字体 很多开发者没有注意到其实UI界面中最重要的元素是字体,一款合适的字体能给整个游戏的界面感官带来蜕变。 请看案例 那么如何挑选适合自己的字体呢? 我总结出了一些小经验可供参考: 黑体:通用 宋体:古风、武侠、修仙 楷体:古风、武侠、修仙 圆体:卡通、动漫、Q版 科技:科幻、未来、电子 顺手分享一个免费可商用字体网站: 当然 如果你不知道自己的游戏适合什么风格
精华
123 赞
44 回复
【新游上线】末日100天截图
【新游上线】末日100天
大家好,我们是《末日100天》的开发者Paul~ 这是一款围绕「生存-经营-轮回」展开的废土策略小游戏:白天分配 3 点行动力经营据点,夜里迎接十天一循环的尸潮,每张地图第 100 天还有一场首领战等着你。五张地图、五大区域机制、可继承的轮回遗产,以及钻石商城里的抽奖机——我们希望每次重开都有一点点新意。 以下是游戏简单介绍: 1.游戏背景 废土历元年,未知病毒席卷全球,城市化为死地。幸存者们退守
9 赞
6 回复
开发心得-界面布局心得截图
开发心得-界面布局心得
大家好,我正在用 TapTap 制造制作一款2D 治愈林间徒步旅行游戏《徒步荒野》。 我分享一下我的开发心得,希望能有用,下面是一些界面布局的心得。 第一步:定版式、操作 先确定游戏是横版还是竖版、需要哪些操作按钮,敲定整体玩法思路。 我的玩法灵感参考《边境之旅》,主打散步看风景、沿途触发随机事件。 原版是 3D,考虑到自己是新手,选择2D 横版街机式来做,制作更简单、好上手。 第二步:敲定全局美
6 赞
3 回复
2D 等轴测视角:完整理论截图
2D 等轴测视角:完整理论
2D 等轴测视角:完整理论 一、视角的本质 什么是等轴测 人站在高处斜着往下看地面,地面上的方格子不再是正方形,而变成了菱形。这就是等轴测的视觉本质。 俯视(正上方看下去): 等轴测(斜上方看下去): ┌──┬──┬──┐ ◇ ├──┼──┼──┤ ◇ ◇ ├──┼──┼──┤ ◇ ◇ ◇ └──┴──┴──┘ ◇ ◇ ◇ 正方形网格经过旋转 + 压缩,变成了菱形网格。 为什么是 2:1
6 赞
永恒虚空持续开发日记1——关于游戏中的新名词:场频截图
永恒虚空持续开发日记1——关于游戏中的新名词:场频
写在前边:首先感谢TapTap制造版主大大@汪崽 对于作品潜力的肯定,给与了我积分计划二的权限[表情_不好意思]。这边也在加紧开发改进各种功能中,期望尽快给大家带来成熟的版本。[表情_猫咪举手] 大家好,我是永恒虚空的制作人黑猫不详,大家叫我黑猫就好。从今天开始我将以后置开发日记的形式给大家分享我在TapTap制造中制作的游戏永恒虚空的开发过程,新人希望大家多多关照! 今天先给大家介绍我作品中最重
投票
3 赞
游戏自荐《少女终焉契约》截图
游戏自荐《少女终焉契约》
之前玩放置类型的rpg游戏的时候我就在想,现在游戏的操作有的太过于繁琐了,有没有一款休闲一点的,想上线就上线,离线的时候角色能自动行动的游戏呢?感谢TapTap制造,我按照我的想法开发出了现在这款游戏。 一、故事背景和UI 游戏的故事背景是传统的异世界穿越故事,玩家被女神召唤到异世界,随后组建工会,招募美少女,打怪升级探索世界。所以我选择了更加二次元萌系画风的UI风格,主页为各个主要的功能,点开来
8 赞
3 回复
关于制作出质量很高的横版战斗角色的方法截图
关于制作出质量很高的横版战斗角色的方法
其实全篇就一句话,角色为啥做起来这么好看,因为我一帧一帧K的。 在做角色之前,我们需要一个角色的设计稿,这个东西很简单,你把人设写好剩下的交给AI就行了,所有图片,序列帧都可以让AI绘制和处理,学会绘图是你要制作高质量游戏的第一课。 这里拿我在做的角色举例,他的参考图是这样: 当你拥有了一个角色以后,就要想办法让她动起来了。 那么如何让她动起来,答案是序列帧。 在此之前你需要知道,最容易出现一个误
40 赞
12 回复
本地部署 AI 对接 TapMaker 指南 —— 以 CodeBuddy 为例V1.1截图
本地部署 AI 对接 TapMaker 指南 —— 以 CodeBuddy 为例V1.1
写在前面 大家好,我是橘猫,和你一样也是TapMaker的萌新玩家。在"全能神"天哥的悉心指导下,我顺利完成了本地开发环境的部署。经过这段时间的实战测试,已经成功打通了「本地开发 → 同步至TapMaker」的完整流程。 以下内容全部来自我的个人实操经验,旨在为同样在探索本地部署的朋友提供一个参考。每个人的电脑环境、网络情况、AI工具版本都不尽相同,文中的步骤仅供交流学习。如果你照着操作后遇到问题
36 赞
16 回复