Files
planet/frontend/vite.config.mts
rayd1o dd176a6ae6
Some checks failed
ci / backend (push) Has been cancelled
ci / frontend (push) Has been cancelled
release / images (push) Has been cancelled
ci / delivery (push) Has been cancelled
release: bump version to 0.57.0
2026-05-14 01:02:17 +08:00

114 lines
2.8 KiB
TypeScript

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import path from 'path'
import fs from 'fs'
import { fileURLToPath } from 'url'
const backendPort = process.env.PLANET_BACKEND_PORT || '8000'
const backendHttpTarget = `http://localhost:${backendPort}`
const backendWsTarget = `ws://localhost:${backendPort}`
const __dirname = path.dirname(fileURLToPath(import.meta.url))
export default defineConfig({
plugins: [
react(),
{
name: 'legacy-earth',
configureServer(server) {
server.middlewares.use('/legacy/earth', (req, res, next) => {
let url = req.url || '/'
if (url === '' || url === '/') {
url = '/3dearthmult.html'
}
const filePath = path.resolve(__dirname, 'legacy/3dearthmult' + url)
if (fs.existsSync(filePath) && fs.statSync(filePath).isFile()) {
const ext = path.extname(filePath).toLowerCase()
const contentTypes = {
'.html': 'text/html',
'.json': 'application/json',
'.jpg': 'image/jpeg',
'.jpeg': 'image/jpeg',
'.png': 'image/png',
'.js': 'application/javascript',
'.css': 'text/css'
}
res.setHeader('Content-Type', contentTypes[ext] || 'text/plain')
fs.createReadStream(filePath).pipe(res)
} else {
next()
}
})
}
}
],
server: {
port: 3000,
proxy: {
'/api': {
target: backendHttpTarget,
changeOrigin: true,
secure: false,
},
'/ws': {
target: backendWsTarget,
ws: true,
changeOrigin: true,
secure: false,
},
'/health': {
target: backendHttpTarget,
changeOrigin: true,
secure: false,
},
},
fs: {
allow: ['..'],
},
},
publicDir: 'public',
resolve: {
alias: {
'@': path.resolve(__dirname, './src'),
},
},
optimizeDeps: {
entries: ['src/main.tsx'],
exclude: ['satellite.js'],
},
build: {
rollupOptions: {
output: {
manualChunks(id) {
if (!id.includes('node_modules')) {
return
}
if (id.includes('/@ant-design/icons/')) {
return 'icons-vendor'
}
if (
id.includes('/react/') ||
id.includes('/react-dom/') ||
id.includes('/react-router-dom/') ||
id.includes('/scheduler/')
) {
return 'react-vendor'
}
if (id.includes('/axios/')) {
return 'network-vendor'
}
if (id.includes('/three/') || id.includes('/simplex-noise/') || id.includes('/satellite.js/')) {
return 'earth-vendor'
}
},
},
},
},
})