#!/bin/bash # 鲸鱼镇 本地Web服务器 (Linux/macOS) # 版本: 1.0.0 # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 配置变量 BUILD_DIR="build/web" PORT=8000 FALLBACK_PORT=8080 echo "========================================" echo " 鲸鱼镇 本地Web服务器 v1.0" echo "========================================" echo # 检查导出文件 echo -e "${BLUE}[检查]${NC} 验证Web导出文件..." if [ ! -f "$BUILD_DIR/index.html" ]; then echo -e "${RED}[错误]${NC} 未找到Web导出文件!" echo echo "请先运行以下命令导出项目:" echo " ./scripts/build_web.sh" echo echo "或在Godot编辑器中导出Web版本到: $BUILD_DIR/" echo exit 1 fi # 检查必要文件 echo -e "${BLUE}[验证]${NC} 检查必要文件..." REQUIRED_FILES="index.html index.js index.wasm index.pck" MISSING_FILES="" for file in $REQUIRED_FILES; do if [ ! -f "$BUILD_DIR/$file" ]; then MISSING_FILES="$MISSING_FILES $file" fi done if [ -n "$MISSING_FILES" ]; then echo -e "${RED}[错误]${NC} 缺少必要文件:$MISSING_FILES" echo "请重新导出项目" echo exit 1 fi # 检查Python echo -e "${BLUE}[检查]${NC} 验证Python环境..." if ! command -v python3 &> /dev/null && ! command -v python &> /dev/null; then echo -e "${RED}[错误]${NC} 未找到Python!" echo echo "请安装Python 3.x:" echo " macOS: brew install python" echo " Ubuntu: sudo apt install python3" echo " 或访问: https://python.org/downloads" echo exit 1 fi # 确定Python命令 PYTHON_CMD="python3" if ! command -v python3 &> /dev/null; then PYTHON_CMD="python" fi # 获取Python版本 PYTHON_VERSION=$($PYTHON_CMD --version 2>&1 | cut -d' ' -f2) echo -e "${GREEN}[信息]${NC} Python版本: $PYTHON_VERSION" # 显示文件信息 echo echo -e "${GREEN}[信息]${NC} Web文件统计:" TOTAL_SIZE=$(du -sb "$BUILD_DIR" | cut -f1) TOTAL_MB=$((TOTAL_SIZE / 1024 / 1024)) for file in "$BUILD_DIR"/*; do if [ -f "$file" ]; then filename=$(basename "$file") size=$(stat -f%z "$file" 2>/dev/null || stat -c%s "$file" 2>/dev/null) size_mb=$((size / 1024 / 1024)) if [ $size_mb -gt 0 ]; then echo " $filename: ${size_mb} MB" else size_kb=$((size / 1024)) echo " $filename: ${size_kb} KB" fi fi done echo " 总大小: ${TOTAL_MB} MB" # 检查端口占用 echo echo -e "${BLUE}[网络]${NC} 检查端口占用..." if lsof -Pi :$PORT -sTCP:LISTEN -t >/dev/null 2>&1; then echo -e "${YELLOW}[警告]${NC} 端口 $PORT 已被占用,尝试使用 $FALLBACK_PORT" PORT=$FALLBACK_PORT if lsof -Pi :$PORT -sTCP:LISTEN -t >/dev/null 2>&1; then echo -e "${RED}[错误]${NC} 端口 $PORT 也被占用!" echo "请手动指定端口: $PYTHON_CMD -m http.server [端口号]" echo exit 1 fi fi # 获取本机IP地址 LOCAL_IP=$(ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1' | head -1) if [ -z "$LOCAL_IP" ]; then LOCAL_IP=$(hostname -I | cut -d' ' -f1 2>/dev/null) fi if [ -z "$LOCAL_IP" ]; then LOCAL_IP="localhost" fi # 显示启动信息 echo echo -e "${GREEN}[启动]${NC} 启动HTTP服务器..." echo " 端口: $PORT" echo " 目录: $BUILD_DIR" echo " Python: $PYTHON_VERSION" echo echo "========================================" echo -e "${GREEN} 访问地址${NC}" echo "========================================" echo " 本地访问: http://localhost:$PORT" echo " 局域网访问: http://$LOCAL_IP:$PORT" echo echo -e "${YELLOW}[控制]${NC} 服务器控制:" echo " 停止服务器: Ctrl+C" echo " 重启服务器: 关闭后重新运行脚本" echo echo -e "${BLUE}[调试]${NC} 调试工具:" echo " 开发者工具: F12" echo " 控制台日志: 查看浏览器Console" echo " 网络请求: 查看Network标签" echo echo "========================================" # 尝试自动打开浏览器 echo -e "${BLUE}[浏览器]${NC} 尝试打开默认浏览器..." if command -v open &> /dev/null; then # macOS open "http://localhost:$PORT" 2>/dev/null elif command -v xdg-open &> /dev/null; then # Linux xdg-open "http://localhost:$PORT" 2>/dev/null else echo -e "${YELLOW}[提示]${NC} 无法自动打开浏览器,请手动访问上述地址" fi echo echo -e "${GREEN}[就绪]${NC} 服务器启动中..." echo # 切换到构建目录并启动服务器 cd "$BUILD_DIR" # 创建简单的服务器日志 echo "[$(date)] 服务器启动 - 端口:$PORT" >> server.log # 设置信号处理 trap 'echo -e "\n${YELLOW}[停止]${NC} 服务器已停止"; echo "[$(date)] 服务器停止" >> server.log; exit 0' INT # 启动Python HTTP服务器 $PYTHON_CMD -m http.server $PORT # 服务器停止后的清理 echo echo -e "${YELLOW}[停止]${NC} 服务器已停止" echo "[$(date)] 服务器停止" >> server.log # 返回原目录 cd ../.. echo echo -e "${GREEN}[完成]${NC} 感谢使用鲸鱼镇Web服务器!" echo