diff --git a/frontend/vite.config.js b/frontend/vite.config.js index 34ad7c7..75ea43c 100644 --- a/frontend/vite.config.js +++ b/frontend/vite.config.js @@ -1,4 +1,5 @@ import { fileURLToPath, URL } from 'node:url' +import path from 'node:path' import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' @@ -8,7 +9,11 @@ export default defineConfig({ plugins: [vue()], resolve: { alias: { - '@': fileURLToPath(new URL('./src', import.meta.url)) + '@': fileURLToPath(new URL('./src', import.meta.url)), + // 兜底:若 element-plus exports 解析失败则走 fallback + 'element-plus': path.resolve( + fileURLToPath(new URL('node_modules/element-plus/es/index.mjs', import.meta.url)) + ) } }, server: { diff --git a/start.sh b/start.sh index 11a6e69..878d131 100755 --- a/start.sh +++ b/start.sh @@ -147,6 +147,12 @@ start_frontend() { # 检查端口并清理 kill_port $FRONTEND_PORT + # 清理 Vite 缓存,避免 element-plus exports 解析失败 + if [ -d "node_modules/.vite" ]; then + echo -e "${YELLOW}清理 Vite 缓存...${NC}" + rm -rf node_modules/.vite + fi + # 后台启动前端 nohup npm run dev -- --host 0.0.0.0 --port $FRONTEND_PORT > /tmp/ipam-frontend.log 2>&1 & FRONTEND_PID=$! @@ -159,9 +165,24 @@ start_frontend() { echo " 日志: /tmp/ipam-frontend.log" return 0 else - echo -e "${RED}❌ 前端服务启动失败${NC}" - echo " 查看日志: tail -50 /tmp/ipam-frontend.log" - return 1 + # 如果启动失败,尝试清缓存重试一次 + echo -e "${YELLOW}首次启动失败,尝试清理 Vite 缓存重试...${NC}" + kill -9 $FRONTEND_PID 2>/dev/null + sleep 1 + rm -rf node_modules/.vite + nohup npm run dev -- --host 0.0.0.0 --port $FRONTEND_PORT > /tmp/ipam-frontend.log 2>&1 & + FRONTEND_PID=$! + sleep 12 + if curl -s http://localhost:$FRONTEND_PORT > /dev/null; then + echo -e "${GREEN}✅ 前端服务启动成功 (端口 $FRONTEND_PORT)${NC}" + echo " PID: $FRONTEND_PID" + echo " 日志: /tmp/ipam-frontend.log" + return 0 + else + echo -e "${RED}❌ 前端服务启动失败${NC}" + echo " 查看日志: tail -50 /tmp/ipam-frontend.log" + return 1 + fi fi echo "" }