From 838e2cb037dd8e29141dd24c1ebef49b239cfb10 Mon Sep 17 00:00:00 2001 From: zyj <18107291228@163.com> Date: Fri, 24 Oct 2025 17:50:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Ewails3=E4=BE=BF=E6=90=BA?= =?UTF-8?q?=E5=AE=89=E8=A3=85=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install/wails.bat | 154 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 install/wails.bat diff --git a/install/wails.bat b/install/wails.bat new file mode 100644 index 0000000..84a9853 --- /dev/null +++ b/install/wails.bat @@ -0,0 +1,154 @@ +@echo off +chcp 936 >nul +setlocal enabledelayedexpansion + +rem ---------- 参数与默认值 ---------- +if "%~1"=="" ( + set "GOROOT_REL=..\plugin\go\1.25.3" +) else ( + set "GOROOT_REL=%~1" +) +if "%~2"=="" ( + set "OUTDIR=..\plugin\wails3" +) else ( + set "OUTDIR=%~2" +) +if "%~3"=="" ( + set "WAILS_REF=main" +) else ( + set "WAILS_REF=%~3" +) + +rem ---------- 解析绝对路径 ---------- +for %%I in ("%~dp0%GOROOT_REL%") do set "GOROOT=%%~fI" +for %%I in ("%~dp0%OUTDIR%") do set "GOBIN=%%~fI" + +echo Using portable Go: "%GOROOT%\bin\go.exe" +echo Output directory: "%GOBIN%" +echo Wails ref: %WAILS_REF% +echo. + +rem ---------- 前置检查 ---------- +if not exist "%GOROOT%\bin\go.exe" ( + echo ERROR: go.exe not found in "%GOROOT%\bin\". + echo Please download and extract Go to the GOROOT path or provide correct GOROOT_REL. + pause + exit /b 2 +) + +if not exist "%GOBIN%" ( + mkdir "%GOBIN%" 2>nul + if errorlevel 1 ( + echo ERROR: failed to create output directory "%GOBIN%". + pause + exit /b 3 + ) +) + +rem ---------- 临时环境设置 ---------- +set "OLD_PATH=%PATH%" +set "PATH=%GOROOT%\bin;%PATH%" +set "GOBIN=%GOBIN%" +set "GOROOT=%GOROOT%" +rem 可根据需要启用 GOPROXY +set "GOPROXY=https://goproxy.cn,direct" + +rem ---------- 尝试用 go install 安装(优先) ---------- +echo Trying go install (v3 path)... +"%GOROOT%\bin\go.exe" install github.com/wailsapp/wails/v3/cmd/wails3@latest +if %ERRORLEVEL%==0 goto :installed + +echo go install (v3 path) failed, trying non-v3 path... +"%GOROOT%\bin\go.exe" install github.com/wailsapp/wails/cmd/wails3@latest +if %ERRORLEVEL%==0 goto :installed + +echo go install attempts failed. Will fallback to clone + build. +goto :clone_build + +:installed +rem 安装成功,检查可执行位置 +echo go install succeeded. Searching for wails executable... +if exist "%GOBIN%\wails.exe" ( + set "WAILS_EXE=%GOBIN%\wails.exe" +) else ( + rem 检查默认 GOPATH\bin + for /f "usebackq delims=" %%P in (`"%GOROOT%\bin\go.exe" env GOPATH`) do set "GOPATH_VAL=%%P" + if exist "%GOBIN%\wails.exe" set "WAILS_EXE=%GOBIN%\wails.exe" + if not defined WAILS_EXE if exist "%GOPATH_VAL%\bin\wails.exe" set "WAILS_EXE=%GOPATH_VAL%\bin\wails.exe" + if not defined WAILS_EXE if exist "%GOROOT%\bin\wails.exe" set "WAILS_EXE=%GOROOT%\bin\wails.exe" +) + +if defined WAILS_EXE ( + echo Found wails executable: "%WAILS_EXE%" + echo Version: + "%WAILS_EXE%" version + goto :done +) else ( + echo go install reported success but wails.exe not found in common locations. + goto :clone_build +) + +:clone_build +rem ---------- 回退:克隆源码并用局部 go build ---------- +echo Cloning wails repository and building from source... +set "SRC_DIR=%~dp0wails-src" + +if not exist "%SRC_DIR%\.git" ( + echo Cloning to "%SRC_DIR%"... + git clone https://github.com/wailsapp/wails.git "%SRC_DIR%" + if errorlevel 1 ( + echo ERROR: git clone failed. Ensure git is installed and network is available. + goto :restore_env + ) +) else ( + echo Repo exists, fetching updates... + pushd "%SRC_DIR%" + git fetch --all --tags + git reset --hard + git clean -fd + popd +) + +pushd "%SRC_DIR%" +git checkout %WAILS_REF% 2>nul || git checkout main +git pull origin %WAILS_REF% 2>nul || echo Note: pull failed or ref not present, building current checkout. + +rem 确保 cmd/wails 存在 +if not exist ".\cmd\wails\main.go" ( + echo ERROR: cmd/wails not found in source tree. Check repo structure or ref. + popd + goto :restore_env +) + +echo Building wails CLI to "%GOBIN%\wails.exe" ... +"%GOROOT%\bin\go.exe" build -o "%GOBIN%\wails.exe" ./cmd/wails +if errorlevel 1 ( + echo ERROR: go build failed. Check build errors above. + popd + goto :restore_env +) + +popd + +if exist "%GOBIN%\wails.exe" ( + echo Build succeeded: "%GOBIN%\wails.exe" + "%GOBIN%\wails.exe" version + goto :done +) else ( + echo ERROR: wails.exe not found after build. + goto :restore_env +) + +:restore_env +rem 恢复 PATH +set "PATH=%OLD_PATH%" +echo Environment restored. +pause +exit /b 4 + +:done +rem 恢复 PATH 并结束 +set "PATH=%OLD_PATH%" +echo. +echo Completed. wails.exe is available at: +for %%F in ("%GOBIN%\wails.exe") do if exist "%%~fF" echo %% \ No newline at end of file