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
This commit is contained in:
dongsheng123132
2026-03-12 13:25:18 +08:00
parent ed454f78ac
commit 71e4f5b357
3 changed files with 304 additions and 3 deletions

View File

@@ -143,9 +143,26 @@ bash Mac-Start.command # Mac
```bash ```bash
cd u-claw-app cd u-claw-app
npm install --registry=https://registry.npmmirror.com
npm start # 开发模式运行 # Mac / Linux 一键安装(自动下载 Node.js runtime + 依赖,全部国内镜像)
npm run build:mac # 打包 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 上)
``` ```
### 提交代码 ### 提交代码

120
u-claw-app/setup.bat Normal file
View File

@@ -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

164
u-claw-app/setup.sh Executable file
View File

@@ -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