forked from moyin/whale-town-front
- 实现跨平台Web导出脚本(Windows/Linux/macOS) - 添加本地测试服务器启动脚本 - 配置Godot Web导出预设 - 创建Web资源目录结构 - 支持一键导出和本地测试
188 lines
5.0 KiB
Bash
188 lines
5.0 KiB
Bash
#!/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 |