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:
23
README.md
23
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 上)
|
||||
```
|
||||
|
||||
### 提交代码
|
||||
|
||||
120
u-claw-app/setup.bat
Normal file
120
u-claw-app/setup.bat
Normal 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
164
u-claw-app/setup.sh
Executable 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
|
||||
Reference in New Issue
Block a user