面向初级维护者:每个检查失败都写明「怎么修」而不只是报错。 - run_dev.bat:检查 Go/Node/Wails/配置/前端依赖后启动开发模式, 缺 config.yaml 时自动从 config.example.yaml 复制 - build.bat:打包前先跑单元测试,测试不过拒绝打包(可用 skiptest 强制); 打包成功后提示不要把 config.yaml 和 cmsp.db 一起发给同事 两个脚本必须是 GBK 编码 + CRLF 行尾:cmd 用系统 ANSI 代码页解析 .bat, 存成 UTF-8 会让中文注释把命令行拆坏(实测报「不是内部命令」); UTF-8 带 BOM 则会让 @echo off 失效。.gitattributes 用 *.bat -text 让 Git 原样存取,已验证磁盘字节与 Git 存储字节一致。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LbdtsD3ohhSMy3KPoCgARq
208 lines
5.7 KiB
Batchfile
208 lines
5.7 KiB
Batchfile
@echo off
|
||
setlocal
|
||
|
||
rem ============================================================
|
||
rem [编码提醒] 本文件必须保存为 GBK / ANSI 编码,CRLF 行尾。
|
||
rem 存成 UTF-8 会让 cmd 解析中文出错,脚本直接跑不起来。
|
||
rem 用 VS Code 编辑时,右下角编码要选 GB2312/GBK 再保存。
|
||
rem ============================================================
|
||
rem cmsp 打包脚本
|
||
rem
|
||
rem 双击本文件,把程序打包成一个 exe,可以直接发给同事使用。
|
||
rem 产物在 build\bin\cmsp.exe。
|
||
rem
|
||
rem 只是想改代码看效果,请双击 run_dev.bat,不要用这个。
|
||
rem 打包比开发模式慢很多。
|
||
rem
|
||
rem 遇到报错先看提示里的「怎么修」,照着做通常就好了。
|
||
rem 实在解决不了,把整个黑窗口截图发给维护者。
|
||
rem ============================================================
|
||
|
||
cd /d "%~dp0"
|
||
|
||
echo.
|
||
echo ============================================================
|
||
echo cmsp 打包
|
||
echo ============================================================
|
||
echo.
|
||
|
||
rem ---------- 检查 1:Go ----------
|
||
echo [1/6] 检查 Go ...
|
||
where go >nul 2>nul
|
||
if errorlevel 1 (
|
||
echo.
|
||
echo [X] 没有找到 go 命令。
|
||
echo.
|
||
echo 怎么修:
|
||
echo 1. 到 https://go.dev/dl/ 下载 Go 并安装
|
||
echo 2. 装完关掉这个窗口,重新双击本脚本
|
||
echo ^(装完必须重开窗口,否则读不到新的 PATH^)
|
||
echo.
|
||
goto :fail
|
||
)
|
||
for /f "tokens=3" %%v in ('go version') do set GOVER=%%v
|
||
echo OK %GOVER%
|
||
|
||
rem ---------- 检查 2:Node ----------
|
||
echo [2/6] 检查 Node.js ...
|
||
where node >nul 2>nul
|
||
if errorlevel 1 (
|
||
echo.
|
||
echo [X] 没有找到 node 命令。
|
||
echo.
|
||
echo 怎么修:到 https://nodejs.org/ 下载 LTS 版本安装,
|
||
echo 装完关掉窗口重新双击本脚本。
|
||
echo.
|
||
goto :fail
|
||
)
|
||
for /f %%v in ('node --version') do set NODEVER=%%v
|
||
echo OK %NODEVER%
|
||
|
||
rem ---------- 检查 3:Wails CLI ----------
|
||
echo [3/6] 检查 Wails 命令行工具 ...
|
||
set "WAILS="
|
||
where wails >nul 2>nul
|
||
if not errorlevel 1 set "WAILS=wails"
|
||
|
||
rem where 找不到时,去 Go 的默认安装目录再找一次。
|
||
rem 很多人装完 Go 工具没把 GOPATH 下的 bin 加进 PATH,这里兜住。
|
||
if not defined WAILS (
|
||
for /f "delims=" %%p in ('go env GOPATH') do (
|
||
if exist "%%p\bin\wails.exe" set "WAILS=%%p\bin\wails.exe"
|
||
)
|
||
)
|
||
|
||
if not defined WAILS (
|
||
echo.
|
||
echo [X] 没有找到 wails 命令。
|
||
echo.
|
||
echo 怎么修:在这个窗口里执行下面这条命令,装完再重新双击本脚本
|
||
echo.
|
||
echo go install github.com/wailsapp/wails/v2/cmd/wails@latest
|
||
echo.
|
||
echo 注意要装 v2,不要装 v3。本项目用的是 Wails v2 稳定版。
|
||
echo.
|
||
goto :fail
|
||
)
|
||
echo OK 找到 wails
|
||
|
||
rem ---------- 检查 4:跑单元测试 ----------
|
||
rem 打包前先跑测试。测试不过就别打包,免得把坏版本发给同事。
|
||
echo [4/6] 运行单元测试 ...
|
||
go test ./...
|
||
if not errorlevel 1 (
|
||
echo OK 测试全部通过
|
||
goto :tests_done
|
||
)
|
||
|
||
echo.
|
||
echo [X] 单元测试没通过。
|
||
echo.
|
||
echo 怎么修:
|
||
echo 往上翻找 FAIL 开头的行,那里写了哪个测试失败、
|
||
echo 期望什么、实际是什么。先把代码改对再打包。
|
||
echo.
|
||
if /i not "%~1"=="skiptest" (
|
||
echo 打包已停止,不把没通过测试的版本发出去。
|
||
echo.
|
||
echo 确实要强行打包时执行:build.bat skiptest
|
||
echo.
|
||
goto :fail
|
||
)
|
||
echo [!] 已按 skiptest 参数忽略测试失败,继续打包。
|
||
echo [!] 这个版本不要发给同事,先把测试修好。
|
||
echo.
|
||
:tests_done
|
||
|
||
rem ---------- 检查 5:前端依赖 ----------
|
||
echo [5/6] 检查前端依赖 ...
|
||
if not exist "frontend\node_modules" (
|
||
echo node_modules 不存在,开始安装,第一次要几分钟 ...
|
||
pushd frontend
|
||
call npm install
|
||
if errorlevel 1 (
|
||
popd
|
||
echo.
|
||
echo [X] npm install 失败。
|
||
echo.
|
||
echo 怎么修:
|
||
echo 1. 确认能上网
|
||
echo 2. 公司网络受限时换镜像源:
|
||
echo npm config set registry https://registry.npmmirror.com
|
||
echo 3. 还不行就删掉 frontend\node_modules 和
|
||
echo frontend\package-lock.json 再跑一次
|
||
echo.
|
||
goto :fail
|
||
)
|
||
popd
|
||
echo 依赖安装完成
|
||
) else (
|
||
echo OK 依赖已安装
|
||
)
|
||
|
||
rem ---------- 打包 ----------
|
||
echo [6/6] 开始打包,大约需要半分钟 ...
|
||
echo.
|
||
|
||
rem -clean 会先清掉上次的产物,避免新旧文件混在一起。
|
||
"%WAILS%" build -clean
|
||
if errorlevel 1 (
|
||
echo.
|
||
echo [X] 打包失败。
|
||
echo.
|
||
echo 常见原因:
|
||
echo - Go 代码有编译错误:往上翻找报错行
|
||
echo - 上一个 cmsp.exe 还在运行,文件被占用:
|
||
echo 关掉正在运行的 cmsp 窗口再试
|
||
echo - 依赖没下全:执行 go mod download 后重试
|
||
echo.
|
||
goto :fail
|
||
)
|
||
|
||
if not exist "build\bin\cmsp.exe" (
|
||
echo.
|
||
echo [X] 打包命令没报错,但没找到 build\bin\cmsp.exe
|
||
echo 请把这个窗口截图发给维护者。
|
||
echo.
|
||
goto :fail
|
||
)
|
||
|
||
echo.
|
||
echo ============================================================
|
||
echo 打包成功
|
||
echo ============================================================
|
||
echo.
|
||
echo 产物:%CD%\build\bin\cmsp.exe
|
||
for %%f in ("build\bin\cmsp.exe") do echo 大小:%%~zf 字节
|
||
echo.
|
||
echo 发给同事时的注意事项:
|
||
echo - 只发 cmsp.exe 就够了,它已经把界面打包进去了
|
||
echo - [必须] 不要把 config.yaml 一起发出去,里面有账号密码
|
||
echo - [必须] 不要把 cmsp.db 一起发出去,里面有登录状态
|
||
echo - 对方第一次打开后,到「参数设置」页填自己的账号
|
||
echo.
|
||
echo 对方电脑需要装:
|
||
echo - Microsoft Edge WebView2 运行时
|
||
echo ^(Win10 一般自带;没有的话程序会提示去装^)
|
||
echo - Google Chrome ^(用来登录淘宝^)
|
||
echo - ffprobe ^(用来校验下载的视频是否完整^)
|
||
echo.
|
||
|
||
rem 打开产物所在目录,省得手动找。
|
||
explorer "%CD%\build\bin"
|
||
goto :done
|
||
|
||
:fail
|
||
echo.
|
||
echo ============================================================
|
||
echo 打包失败。上面写了怎么修,照着做通常就好。
|
||
echo 解决不了就把这个窗口截图发给维护者。
|
||
echo ============================================================
|
||
echo.
|
||
pause
|
||
exit /b 1
|
||
|
||
:done
|
||
pause
|
||
exit /b 0
|