Files
fauto-design/draggable-panels/vite.config.ts
2025-12-20 19:56:41 +08:00

59 lines
1.8 KiB
TypeScript

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import fs from 'fs'
import path from 'path'
import type { Plugin } from 'vite'
// 配置文件路径
const CONFIG_FILE = path.resolve(__dirname, 'config.json')
// 自定义插件:处理配置文件的读写
function configApiPlugin(): Plugin {
return {
name: 'config-api',
configureServer(server) {
// 读取配置
server.middlewares.use('/api/config', (req, res, next) => {
if (req.method === 'GET') {
try {
if (fs.existsSync(CONFIG_FILE)) {
const config = fs.readFileSync(CONFIG_FILE, 'utf-8')
res.setHeader('Content-Type', 'application/json')
res.end(config)
} else {
res.statusCode = 404
res.end(JSON.stringify({ error: 'Config not found' }))
}
} catch (error) {
res.statusCode = 500
res.end(JSON.stringify({ error: 'Failed to read config' }))
}
} else if (req.method === 'POST') {
let body = ''
req.on('data', (chunk) => {
body += chunk.toString()
})
req.on('end', () => {
try {
const config = JSON.parse(body)
fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2))
res.setHeader('Content-Type', 'application/json')
res.end(JSON.stringify({ success: true }))
} catch (error) {
res.statusCode = 500
res.end(JSON.stringify({ error: 'Failed to save config' }))
}
})
} else {
next()
}
})
}
}
}
// https://vite.dev/config/
export default defineConfig({
plugins: [vue(), configApiPlugin()],
})