Files
SpineParticlesWeb/vite.config.ts
T
2026-08-29 22:59:38 +08:00

49 lines
1.5 KiB
TypeScript

import { defineConfig } from 'vite'
import type { Plugin } from 'vite'
import vue from '@vitejs/plugin-vue'
import { mkdirSync, readdirSync, writeFileSync } from 'node:fs'
import { resolve } from 'node:path'
function presetManifestPlugin(): Plugin {
let presetDirectory = ''
const updateManifest = () => {
if (!presetDirectory) return
mkdirSync(presetDirectory, { recursive: true })
const presets = readdirSync(presetDirectory)
.filter((file) => file.toLowerCase().endsWith('.json') && file !== 'index.json')
.sort((a, b) => a.localeCompare(b, 'zh-CN'))
.map((file) => ({ name: file.replace(/\.json$/i, ''), file }))
writeFileSync(resolve(presetDirectory, 'index.json'), `${JSON.stringify(presets, null, 2)}\n`)
}
return {
name: 'spine-particle-preset-manifest',
configResolved(config) {
presetDirectory = resolve(config.root, 'public/Preset')
updateManifest()
},
buildStart() {
updateManifest()
},
configureServer(server) {
server.watcher.add(presetDirectory)
const refresh = (file: string) => {
if (file.startsWith(presetDirectory) && file.toLowerCase().endsWith('.json')) updateManifest()
}
server.watcher.on('add', refresh)
server.watcher.on('unlink', refresh)
},
}
}
export default defineConfig({
plugins: [vue(), presetManifestPlugin()],
server: {
port: 5173,
host: true,
},
// 让 node_modules 里的 ESM 依赖能直接 work
optimizeDeps: {
include: ['@esotericsoftware/spine-pixi-v7'],
},
})