From 50abe5dece97d8815618e56c90af257da9f2c7f0 Mon Sep 17 00:00:00 2001 From: long <452591453@qq.com> Date: Tue, 26 May 2026 08:59:17 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E8=AE=AD=E7=BB=83=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E6=95=B4=E4=BD=93=E8=BF=81=E5=85=A5=E5=88=86=E5=8C=85?= =?UTF-8?q?,=E5=87=8F=E5=B0=8F=E4=B8=BB=E5=8C=85=E4=BD=93=E7=A7=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 主包超出 2MB 上限无法上传发布版,把训练相关全部移到独立分包。 目录调整: - pages/training/* → training/pages/* - hooks/use{Metronome,VoiceCoach,TrainingSession,TrainingBgm}.ts → training/hooks/* - static/training/* → training/static/* - 主包 hooks/ 目录已清空,所有 use* 都被分包独占 引用路径更新: - 分包内 hook import 用相对路径 ../hooks/xxx,不依赖 @/ alias - 资源路径 /static/training/audio/click.mp3 → /training/static/audio/click.mp3 - useMetronome 默认 clickSrc / useVoiceCoach VOICE_BASE / useTrainingBgm BGM_BASE 全部对齐新路径 pages.json: - 主包 pages 移除 training/index 和 training/metronome - subPackages 新增 root="training",含 pages/index 和 pages/metronome - 跟现有 TUIKit / doctor 分包风格一致 调用方: - components/dev-training-entry navigateTo URL 更新成 /training/pages/metronome (此组件留在主包,主包跳分包是合法操作) 文档/工具同步: - training/static/README.md 路径示例改为 training/static/... - scripts/generate-voice.mjs VOICE_DIR 与提示输出对齐新路径 Git mv 检测到的全是 rename(R),历史完整保留。 分包总体 80K(pages 44K + hooks 20K + static 16K),主包瘦身明显。 Co-authored-by: Cursor --- .../components/dev-training-entry/index.vue | 4 +- TUICallKit-Vue3/pages.json | 37 ++++++++++-------- TUICallKit-Vue3/scripts/generate-voice.mjs | 14 +++---- .../{ => training}/hooks/useMetronome.ts | 2 +- .../{ => training}/hooks/useTrainingBgm.ts | 2 +- .../hooks/useTrainingSession.ts | 0 .../{ => training}/hooks/useVoiceCoach.ts | 2 +- .../pages}/components/exercise-anim.vue | 0 .../training => training/pages}/exercises.ts | 0 .../training => training/pages}/index.vue | 10 ++--- .../training => training/pages}/metronome.vue | 6 +-- .../training => training/static}/README.md | 8 ++-- .../static}/audio/click-wood.mp3 | Bin .../static}/audio/click.mp3 | Bin .../static}/footprint.svg | 0 15 files changed, 45 insertions(+), 40 deletions(-) rename TUICallKit-Vue3/{ => training}/hooks/useMetronome.ts (99%) rename TUICallKit-Vue3/{ => training}/hooks/useTrainingBgm.ts (98%) rename TUICallKit-Vue3/{ => training}/hooks/useTrainingSession.ts (100%) rename TUICallKit-Vue3/{ => training}/hooks/useVoiceCoach.ts (97%) rename TUICallKit-Vue3/{pages/training => training/pages}/components/exercise-anim.vue (100%) rename TUICallKit-Vue3/{pages/training => training/pages}/exercises.ts (100%) rename TUICallKit-Vue3/{pages/training => training/pages}/index.vue (98%) rename TUICallKit-Vue3/{pages/training => training/pages}/metronome.vue (99%) rename TUICallKit-Vue3/{static/training => training/static}/README.md (94%) rename TUICallKit-Vue3/{static/training => training/static}/audio/click-wood.mp3 (100%) rename TUICallKit-Vue3/{static/training => training/static}/audio/click.mp3 (100%) rename TUICallKit-Vue3/{static/training => training/static}/footprint.svg (100%) diff --git a/TUICallKit-Vue3/components/dev-training-entry/index.vue b/TUICallKit-Vue3/components/dev-training-entry/index.vue index dab2b80c..cb3217b7 100644 --- a/TUICallKit-Vue3/components/dev-training-entry/index.vue +++ b/TUICallKit-Vue3/components/dev-training-entry/index.vue @@ -3,7 +3,7 @@ - + diff --git a/TUICallKit-Vue3/pages.json b/TUICallKit-Vue3/pages.json index 885c1cd9..8fe89074 100644 --- a/TUICallKit-Vue3/pages.json +++ b/TUICallKit-Vue3/pages.json @@ -69,22 +69,6 @@ "style": { "navigationBarTitleText": "付款" } - }, - { - "path": "pages/training/index", - "style": { - "navigationBarTitleText": "练一练" - } - }, - { - "path": "pages/training/metronome", - "style": { - "navigationBarTitleText": "节拍器", - "navigationBarBackgroundColor": "#f8fafc", - "navigationBarTextStyle": "black", - "backgroundColor": "#f8fafc", - "disableScroll": true - } } ], "subPackages": [ @@ -121,6 +105,27 @@ } } ] + }, + { + "root": "training", + "pages": [ + { + "path": "pages/index", + "style": { + "navigationBarTitleText": "练一练" + } + }, + { + "path": "pages/metronome", + "style": { + "navigationBarTitleText": "节拍器", + "navigationBarBackgroundColor": "#f8fafc", + "navigationBarTextStyle": "black", + "backgroundColor": "#f8fafc", + "disableScroll": true + } + } + ] } ], "tabBar": { diff --git a/TUICallKit-Vue3/scripts/generate-voice.mjs b/TUICallKit-Vue3/scripts/generate-voice.mjs index e34090c6..ece61c83 100644 --- a/TUICallKit-Vue3/scripts/generate-voice.mjs +++ b/TUICallKit-Vue3/scripts/generate-voice.mjs @@ -16,9 +16,9 @@ * node scripts/generate-voice.mjs --voice 茉莉 * node scripts/generate-voice.mjs --force # 已存在的也重新生成 * - * 输出: - * src/static/training/voice/numbers/{1..30}.mp3 - * src/static/training/voice/prompts/{key}.mp3 + * 输出(分包): + * training/static/voice/numbers/{1..30}.mp3 + * training/static/voice/prompts/{key}.mp3 * * 需要 Node 18+(用内置 fetch) */ @@ -32,7 +32,7 @@ const __filename = fileURLToPath(import.meta.url) const __dirname = dirname(__filename) const ROOT = join(__dirname, '..') -const VOICE_DIR = join(ROOT, 'src/static/training/voice') +const VOICE_DIR = join(ROOT, 'training/static/voice') const NUMBERS_DIR = join(VOICE_DIR, 'numbers') const PROMPTS_DIR = join(VOICE_DIR, 'prompts') @@ -202,9 +202,9 @@ async function main() { } console.log('\n下一步:') - console.log(' 1. 准备 click 音 → src/static/training/audio/click.mp3') - console.log(' 2. 准备 BGM → src/static/training/bgm/{train-light,rest-meditation}.mp3') - console.log(' 3. npm run dev:mp-weixin → 进入 /pages/training/index') + console.log(' 1. 准备 click 音 → training/static/audio/click.mp3') + console.log(' 2. 准备 BGM → training/static/bgm/{train-light,rest-meditation}.mp3') + console.log(' 3. 编译运行 → 进入 /training/pages/index') } main().catch((e) => { diff --git a/TUICallKit-Vue3/hooks/useMetronome.ts b/TUICallKit-Vue3/training/hooks/useMetronome.ts similarity index 99% rename from TUICallKit-Vue3/hooks/useMetronome.ts rename to TUICallKit-Vue3/training/hooks/useMetronome.ts index d68a616f..0f4bc2f2 100644 --- a/TUICallKit-Vue3/hooks/useMetronome.ts +++ b/TUICallKit-Vue3/training/hooks/useMetronome.ts @@ -93,7 +93,7 @@ export function useMetronome(options: MetronomeOptions = {}) { initialBpm = 80, bpmMin = 40, bpmMax = 240, - clickSrc = '/static/training/audio/click.mp3', + clickSrc = '/training/static/audio/click.mp3', accentSrc, poolSize = 4, onBeat, diff --git a/TUICallKit-Vue3/hooks/useTrainingBgm.ts b/TUICallKit-Vue3/training/hooks/useTrainingBgm.ts similarity index 98% rename from TUICallKit-Vue3/hooks/useTrainingBgm.ts rename to TUICallKit-Vue3/training/hooks/useTrainingBgm.ts index 13dfc585..0bbdc48c 100644 --- a/TUICallKit-Vue3/hooks/useTrainingBgm.ts +++ b/TUICallKit-Vue3/training/hooks/useTrainingBgm.ts @@ -1,6 +1,6 @@ import { ref, onUnmounted } from 'vue' -const BGM_BASE = '/static/training/bgm' +const BGM_BASE = '/training/static/bgm' export type BgmMode = 'none' | 'training' | 'resting' diff --git a/TUICallKit-Vue3/hooks/useTrainingSession.ts b/TUICallKit-Vue3/training/hooks/useTrainingSession.ts similarity index 100% rename from TUICallKit-Vue3/hooks/useTrainingSession.ts rename to TUICallKit-Vue3/training/hooks/useTrainingSession.ts diff --git a/TUICallKit-Vue3/hooks/useVoiceCoach.ts b/TUICallKit-Vue3/training/hooks/useVoiceCoach.ts similarity index 97% rename from TUICallKit-Vue3/hooks/useVoiceCoach.ts rename to TUICallKit-Vue3/training/hooks/useVoiceCoach.ts index c17c26d9..bc27bbae 100644 --- a/TUICallKit-Vue3/hooks/useVoiceCoach.ts +++ b/TUICallKit-Vue3/training/hooks/useVoiceCoach.ts @@ -1,6 +1,6 @@ import { onUnmounted } from 'vue' -const VOICE_BASE = '/static/training/voice' +const VOICE_BASE = '/training/static/voice' export type VoicePromptKey = | 'start' diff --git a/TUICallKit-Vue3/pages/training/components/exercise-anim.vue b/TUICallKit-Vue3/training/pages/components/exercise-anim.vue similarity index 100% rename from TUICallKit-Vue3/pages/training/components/exercise-anim.vue rename to TUICallKit-Vue3/training/pages/components/exercise-anim.vue diff --git a/TUICallKit-Vue3/pages/training/exercises.ts b/TUICallKit-Vue3/training/pages/exercises.ts similarity index 100% rename from TUICallKit-Vue3/pages/training/exercises.ts rename to TUICallKit-Vue3/training/pages/exercises.ts diff --git a/TUICallKit-Vue3/pages/training/index.vue b/TUICallKit-Vue3/training/pages/index.vue similarity index 98% rename from TUICallKit-Vue3/pages/training/index.vue rename to TUICallKit-Vue3/training/pages/index.vue index 36577310..6552e37b 100644 --- a/TUICallKit-Vue3/pages/training/index.vue +++ b/TUICallKit-Vue3/training/pages/index.vue @@ -151,10 +151,10 @@ import { onShow, onHide } from '@dcloudio/uni-app' import ExerciseAnim from './components/exercise-anim.vue' import { EXERCISE_PRESETS, getPresetById } from './exercises' import type { ExercisePreset } from './exercises' -import { useMetronome } from '@/hooks/useMetronome' -import { useTrainingSession } from '@/hooks/useTrainingSession' -import { useVoiceCoach } from '@/hooks/useVoiceCoach' -import { useTrainingBgm } from '@/hooks/useTrainingBgm' +import { useMetronome } from '../hooks/useMetronome' +import { useTrainingSession } from '../hooks/useTrainingSession' +import { useVoiceCoach } from '../hooks/useVoiceCoach' +import { useTrainingBgm } from '../hooks/useTrainingBgm' const equipmentList = ['哑铃', '握力环', '健身环', '徒手'] as const type Equipment = (typeof equipmentList)[number] @@ -286,7 +286,7 @@ const onSkipRest = () => { } const goMetronome = () => { - uni.navigateTo({ url: '/pages/training/metronome' }) + uni.navigateTo({ url: '/training/pages/metronome' }) } onHide(() => { diff --git a/TUICallKit-Vue3/pages/training/metronome.vue b/TUICallKit-Vue3/training/pages/metronome.vue similarity index 99% rename from TUICallKit-Vue3/pages/training/metronome.vue rename to TUICallKit-Vue3/training/pages/metronome.vue index 225fd9b5..5e633c69 100644 --- a/TUICallKit-Vue3/pages/training/metronome.vue +++ b/TUICallKit-Vue3/training/pages/metronome.vue @@ -89,7 +89,7 @@