From 71e4f5b3572d6141fc882392dd42c9b3db39f542 Mon Sep 17 00:00:00 2001 From: dongsheng123132 <90887123+dongsheng123132@users.noreply.github.com> Date: Thu, 12 Mar 2026 13:25:18 +0800 Subject: [PATCH] feat: add one-click setup scripts for desktop app (Mac + Windows) - setup.sh: auto-downloads Node.js + npm deps + runtime from China mirrors - setup.bat: same for Windows, guides to install Node.js if missing - Both set Electron mirror to npmmirror.com for China users - Updated README with new setup instructions --- README.md | 23 +++++- u-claw-app/setup.bat | 120 +++++++++++++++++++++++++++++++ u-claw-app/setup.sh | 164 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 304 insertions(+), 3 deletions(-) create mode 100644 u-claw-app/setup.bat create mode 100755 u-claw-app/setup.sh diff --git a/README.md b/README.md index 0283de6..9bd8545 100644 --- a/README.md +++ b/README.md @@ -143,9 +143,26 @@ bash Mac-Start.command # Mac ```bash cd u-claw-app -npm install --registry=https://registry.npmmirror.com -npm start # 开发模式运行 -npm run build:mac # 打包 + +# Mac / Linux 一键安装(自动下载 Node.js runtime + 依赖,全部国内镜像) +bash setup.sh + +# Windows 一键安装 +setup.bat +``` + +`setup.sh` / `setup.bat` 会自动: +1. 检查或下载 Node.js v22(国内镜像 npmmirror.com) +2. 安装 npm 依赖 + Electron(国内镜像) +3. 下载打包用 Node.js runtime +4. 询问是否立即启动 + +安装完成后: +```bash +npm run dev # 开发模式运行 +npm run build:mac-arm64 # 打包 Mac ARM64 DMG +npm run build:mac-x64 # 打包 Mac Intel DMG +npm run build:win # 打包 Windows EXE(需在 Windows 上) ``` ### 提交代码 diff --git a/u-claw-app/setup.bat b/u-claw-app/setup.bat new file mode 100644 index 0000000..a57fd27 --- /dev/null +++ b/u-claw-app/setup.bat @@ -0,0 +1,120 @@ +@echo off +chcp 65001 >nul 2>&1 +title U-Claw Desktop App Setup + +echo. +echo ======================================== +echo U-Claw Desktop App Setup +echo 一键安装开发环境 +echo ======================================== +echo. + +set "APP_DIR=%~dp0" +set "NODE_VER=v22.14.0" +set "MIRROR=https://registry.npmmirror.com" +set "NODE_MIRROR=https://npmmirror.com/mirrors/node" + +REM ---- 1. Check Node.js ---- +echo [1/4] 检查 Node.js... + +where node >nul 2>&1 +if %errorlevel%==0 ( + for /f "tokens=*" %%v in ('node --version') do set SYS_VER=%%v + echo 系统 Node.js: %SYS_VER% + set "NODE_OK=1" +) else ( + set "NODE_OK=0" +) + +if "%NODE_OK%"=="0" ( + echo. + echo [!] 未检测到 Node.js + echo. + echo 请先安装 Node.js v22+: + echo. + echo 方法1 - 官网下载: + echo https://nodejs.org/ + echo. + echo 方法2 - 国内镜像(推荐): + echo https://npmmirror.com/mirrors/node/%NODE_VER%/ + echo 下载 node-%NODE_VER%-win-x64.zip,解压后加到 PATH + echo. + echo 方法3 - Scoop(包管理器): + echo scoop install nodejs-lts + echo. + echo 安装完成后重新运行此脚本。 + echo. + pause + exit /b 1 +) + +echo. + +REM ---- 2. Install npm dependencies ---- +echo [2/4] 安装依赖 (国内镜像)... +echo 镜像: %MIRROR% +echo. + +cd /d "%APP_DIR%" + +set "ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/" +set "ELECTRON_BUILDER_BINARIES_MIRROR=https://npmmirror.com/mirrors/electron-builder-binaries/" + +call npm install --registry=%MIRROR% +echo. +echo 依赖安装完成! +echo. + +REM ---- 3. Download Node.js runtime for packaging ---- +echo [3/4] 准备打包用 Node.js runtime... + +set "RUNTIME_DIR=%APP_DIR%resources\runtime\node-win32-x64" +if exist "%RUNTIME_DIR%\node.exe" ( + echo Runtime 已就绪 +) else ( + echo 下载 Node.js %NODE_VER% runtime (win-x64)... + mkdir "%RUNTIME_DIR%" 2>nul + + set "ZIP_NAME=node-%NODE_VER%-win-x64.zip" + set "URL=%NODE_MIRROR%/%NODE_VER%/%ZIP_NAME%" + + echo 下载中... + curl -# -L "%URL%" -o "%TEMP%\%ZIP_NAME%" + + echo 解压中... + powershell -Command "Expand-Archive -Path '%TEMP%\%ZIP_NAME%' -DestinationPath '%TEMP%\node-extract' -Force" + xcopy /s /e /q "%TEMP%\node-extract\node-%NODE_VER%-win-x64\*" "%RUNTIME_DIR%\" >nul + rd /s /q "%TEMP%\node-extract" 2>nul + del "%TEMP%\%ZIP_NAME%" 2>nul + + echo Runtime 下载完成! +) +echo. + +REM ---- 4. Done ---- +echo [4/4] 完成! +echo. +echo ======================================== +echo 安装成功! +echo ======================================== +echo. +echo 接下来你可以: +echo. +echo 运行开发版: +echo cd u-claw-app +echo npm run dev +echo. +echo 打包 EXE: +echo npm run build:win +echo. +echo 产出在 release\ 目录 +echo. + +set /p RUN=" 现在启动开发版?(y/n): " +if /i "%RUN%"=="y" ( + echo. + echo 启动 U-Claw... + npm run dev +) + +pause diff --git a/u-claw-app/setup.sh b/u-claw-app/setup.sh new file mode 100755 index 0000000..2a2cc5c --- /dev/null +++ b/u-claw-app/setup.sh @@ -0,0 +1,164 @@ +#!/bin/bash +# ============================================================ +# U-Claw Desktop App - One-click Setup (Mac/Linux) +# 克隆后运行此脚本,自动配置开发环境 +# ============================================================ + +set -e + +GREEN='\033[0;32m' +CYAN='\033[0;36m' +RED='\033[0;31m' +YELLOW='\033[1;33m' +NC='\033[0m' +BOLD='\033[1m' + +APP_DIR="$(cd "$(dirname "$0")" && pwd)" +NODE_VER="v22.14.0" +MIRROR="https://registry.npmmirror.com" +NODE_MIRROR="https://npmmirror.com/mirrors/node" + +clear +echo "" +echo -e "${CYAN}${BOLD}" +echo " ╔══════════════════════════════════════╗" +echo " ║ U-Claw Desktop App Setup ║" +echo " ║ 一键安装开发环境 ║" +echo " ╚══════════════════════════════════════╝" +echo -e "${NC}" + +# ---- 1. Check / Install Node.js ---- +echo -e " ${BOLD}[1/4] 检查 Node.js...${NC}" + +# Check system node first +SYS_NODE=$(which node 2>/dev/null || true) +if [ -n "$SYS_NODE" ]; then + SYS_VER=$("$SYS_NODE" --version 2>/dev/null || echo "") + MAJOR=$(echo "$SYS_VER" | sed 's/v//' | cut -d. -f1) + if [ "$MAJOR" -ge 20 ] 2>/dev/null; then + echo -e " ${GREEN}系统 Node.js $SYS_VER ✓${NC}" + NODE_BIN="$SYS_NODE" + fi +fi + +# If no suitable system node, download portable one +if [ -z "$NODE_BIN" ]; then + ARCH=$(uname -m) + OS=$(uname -s | tr '[:upper:]' '[:lower:]') + + if [ "$OS" = "darwin" ]; then + if [ "$ARCH" = "arm64" ]; then + PLATFORM="darwin-arm64" + else + PLATFORM="darwin-x64" + fi + elif [ "$OS" = "linux" ]; then + PLATFORM="linux-x64" + else + echo -e " ${RED}不支持的系统: $OS${NC}" + exit 1 + fi + + RUNTIME_DIR="$APP_DIR/resources/runtime/node-${OS}-${ARCH}" + NODE_BIN_PATH="$RUNTIME_DIR/bin/node" + + if [ -f "$NODE_BIN_PATH" ]; then + echo -e " ${GREEN}已有 Node.js runtime ✓${NC}" + NODE_BIN="$NODE_BIN_PATH" + else + echo -e " ${YELLOW}下载 Node.js $NODE_VER ($PLATFORM)...${NC}" + echo -e " ${CYAN}镜像: npmmirror.com${NC}" + + TARBALL="node-${NODE_VER}-${PLATFORM}.tar.gz" + URL="${NODE_MIRROR}/${NODE_VER}/${TARBALL}" + + mkdir -p "$RUNTIME_DIR" + curl -# -L "$URL" -o "/tmp/$TARBALL" + tar -xzf "/tmp/$TARBALL" -C "$RUNTIME_DIR" --strip-components=1 + rm -f "/tmp/$TARBALL" + + chmod +x "$RUNTIME_DIR/bin/node" + NODE_BIN="$NODE_BIN_PATH" + echo -e " ${GREEN}Node.js $NODE_VER 下载完成 ✓${NC}" + fi + + export PATH="$(dirname "$NODE_BIN"):$PATH" +fi + +echo -e " Node: ${GREEN}$("$NODE_BIN" --version)${NC}" +echo "" + +# ---- 2. Install npm dependencies ---- +echo -e " ${BOLD}[2/4] 安装依赖 (国内镜像)...${NC}" +echo -e " ${CYAN}镜像: $MIRROR${NC}" +echo "" + +cd "$APP_DIR" + +# Set electron mirror for China +export ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/" +export ELECTRON_BUILDER_BINARIES_MIRROR="https://npmmirror.com/mirrors/electron-builder-binaries/" + +npm install --registry="$MIRROR" 2>&1 | tail -5 +echo "" +echo -e " ${GREEN}依赖安装完成 ✓${NC}" +echo "" + +# ---- 3. Download Node.js runtime for packaging ---- +echo -e " ${BOLD}[3/4] 准备打包用 Node.js runtime...${NC}" + +# For packaging, we need the runtime in resources/ for the target platform +ARCH=$(uname -m) +OS=$(uname -s | tr '[:upper:]' '[:lower:]') +RUNTIME_DIR="$APP_DIR/resources/runtime/node-${OS}-${ARCH}" + +if [ -f "$RUNTIME_DIR/bin/node" ]; then + echo -e " ${GREEN}Runtime 已就绪 ✓${NC}" +else + PLATFORM="${OS}-${ARCH}" + [ "$OS" = "darwin" ] && [ "$ARCH" = "x86_64" ] && PLATFORM="darwin-x64" + + echo -e " ${YELLOW}下载 Node.js $NODE_VER runtime ($PLATFORM)...${NC}" + TARBALL="node-${NODE_VER}-${PLATFORM}.tar.gz" + URL="${NODE_MIRROR}/${NODE_VER}/${TARBALL}" + + mkdir -p "$RUNTIME_DIR" + curl -# -L "$URL" -o "/tmp/$TARBALL" + tar -xzf "/tmp/$TARBALL" -C "$RUNTIME_DIR" --strip-components=1 + rm -f "/tmp/$TARBALL" + chmod +x "$RUNTIME_DIR/bin/node" + echo -e " ${GREEN}Runtime 下载完成 ✓${NC}" +fi +echo "" + +# ---- 4. Done ---- +echo -e " ${BOLD}[4/4] 完成!${NC}" +echo "" +echo -e " ${GREEN}${BOLD}╔══════════════════════════════════════╗" +echo -e " ║ ✅ 安装成功! ║" +echo -e " ╚══════════════════════════════════════╝${NC}" +echo "" +echo -e " ${BOLD}接下来你可以:${NC}" +echo "" +echo -e " ${CYAN}运行开发版:${NC}" +echo -e " cd u-claw-app" +echo -e " npm run dev" +echo "" +echo -e " ${CYAN}打包 DMG (Mac):${NC}" +echo -e " npm run build:mac-arm64 # Apple Silicon" +echo -e " npm run build:mac-x64 # Intel Mac" +echo "" +echo -e " ${CYAN}打包 EXE (Windows, 需在 Windows 上运行):${NC}" +echo -e " npm run build:win" +echo "" +echo -e " 产出在 ${BOLD}release/${NC} 目录" +echo "" + +# Ask if user wants to run now +read -p " 现在启动开发版?(y/n): " -n 1 RUN +echo "" +if [ "$RUN" = "y" ] || [ "$RUN" = "Y" ]; then + echo "" + echo -e " ${CYAN}启动 U-Claw...${NC}" + npm run dev +fi