fix(miniprogram): 优化分包并清理旧版小游戏

This commit is contained in:
大哥大哥的大哥哥
2026-07-18 11:21:12 +08:00
parent fd7e6071a8
commit 78fd00fa05
22 changed files with 92 additions and 5764 deletions
@@ -51,8 +51,7 @@ build: {
## 说明
-地址 `/tongji/pages/game``/tongji/pages/game-endless` 只是当前项目的兼容跳转,迁移时不需要复制
- 当前项目原来的“糖分突袭”源码保存在 `tongji/legacy-game/game.vue`,没有注册为页面,不参与打包。
-版“糖分突袭”页面及其独占依赖已经移除,项目只注册 `/tongji/endless-game/index` 这一款小游戏
- 连消小目标按“连消×2”累计 2 次;连续 6 次普通消除没有连消时,下一次掉落会提供连消机会。“连消×3”保留为额外积分、驼乳粉与撒花惊喜,不阻挡主线任务。
- 横向 3 个与竖向 3 个相交形成 L/T 形五消时,会在交点生成带高对比 L 标记的范围爆破棋子;该棋子再次被消除时清除周围九格。
- 进入游戏时展示“本周 7 人同行榜”,包含真实平台昵称、前后名次、差距提示和可切换的同行/亲友鼓励;顶部“本周同行”可再次打开。后端部署方式见 `PLATFORM_INTEGRATION.md`
@@ -0,0 +1,38 @@
import { readdirSync, readFileSync } from 'node:fs'
import { resolve } from 'node:path'
const VIRTUAL_ID = 'virtual:tongji-endless-food-images'
const RESOLVED_VIRTUAL_ID = `\0${VIRTUAL_ID}`
/**
* 将游戏食物图内联到 tongji 分包代码。
* 微信代码质量会累计整个代码包内的图片/音频体积;源 JPG 继续保留,便于后续增补和迁移。
*/
export function endlessGameFoodInlinePlugin() {
return {
name: 'tongji-endless-game-food-inline',
enforce: 'pre',
resolveId(id) {
return id === VIRTUAL_ID ? RESOLVED_VIRTUAL_ID : null
},
load(id) {
if (id !== RESOLVED_VIRTUAL_ID) return null
const foodDir = resolve(process.cwd(), 'tongji/endless-game/assets/food')
const images = Object.fromEntries(
readdirSync(foodDir)
.filter((fileName) => fileName.toLowerCase().endsWith('.jpg'))
.sort()
.map((fileName) => {
const filePath = resolve(foodDir, fileName)
this.addWatchFile(filePath)
const key = fileName.replace(/\.jpg$/i, '')
const dataUrl = `data:image/jpeg;base64,${readFileSync(filePath).toString('base64')}`
return [key, dataUrl]
})
)
return `export default ${JSON.stringify(images)}`
},
}
}
@@ -303,14 +303,7 @@ import TongjiIcon from './components/TongjiIcon.vue'
import { useGameSfx } from './composables/useGameSfx.js'
import { useGamePlatform } from './composables/useGamePlatform.js'
import { useGameAuth } from './composables/useGameAuth.js'
const FOOD_IMAGE_MODULES = import.meta.glob('./assets/food/*.jpg', {
eager: true,
import: 'default'
})
const FOOD_IMAGES = Object.fromEntries(
Object.entries(FOOD_IMAGE_MODULES).map(([path, url]) => [path.split('/').pop().replace(/\.jpg$/, ''), url])
)
import FOOD_IMAGES from 'virtual:tongji-endless-food-images'
const ROWS = 5
const COLS = 4