Files
eene_dashboard/frontend/vite.config.ts
EENE Dashboard b3f2da203b EENE Dashboard upload to Gitea
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-17 16:59:34 +09:00

70 lines
1.8 KiB
TypeScript

import fs from 'fs';
import path from 'path';
import type { Plugin } from 'vite';
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import tailwindcss from '@tailwindcss/vite';
import basicSsl from '@vitejs/plugin-basic-ssl';
/** http-local: http://localhost:3000 | https-lan: https://{LAN IP}:3000 */
function readLanIp(): string | null {
const file = path.join(__dirname, '.lan-ip');
if (!fs.existsSync(file)) return null;
const ip = fs.readFileSync(file, 'utf8').trim();
return ip || null;
}
function lanOnlyUrls(lanHost: string, port: number): Plugin {
return {
name: 'lan-only-urls',
configureServer(server) {
server.printUrls = () => {
server.config.logger.info(`\n ➜ LAN: https://${lanHost}:${port}/\n`, { clear: true });
};
},
};
}
export default defineConfig(({ mode }) => {
const isHttpsLan = mode === 'https-lan';
const lanHost = readLanIp();
if (isHttpsLan && !lanHost) {
throw new Error('frontend/.lan-ip missing — restart via 서버시작.bat');
}
return {
plugins: [
react(),
tailwindcss(),
...(isHttpsLan ? [basicSsl(), lanOnlyUrls(lanHost!, 3000)] : []),
],
resolve: {
alias: {
'@': path.resolve(__dirname, './src'),
},
},
server: {
port: 3000,
strictPort: true,
host: isHttpsLan ? lanHost! : 'localhost',
https: isHttpsLan,
proxy: {
'/api': {
target: 'http://localhost:4000',
changeOrigin: true,
},
'/uploads': {
target: 'http://localhost:4000',
changeOrigin: true,
},
'/socket.io': {
target: 'http://localhost:4000',
changeOrigin: true,
ws: true,
},
},
},
};
});