Files
zyt/TUICallKit-Vue3/tongji/endless-game/foodInlinePlugin.js
T

39 lines
1.4 KiB
JavaScript

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)}`
},
}
}