chore: 增加 run_dev.bat 与 build.bat 启动打包脚本

面向初级维护者:每个检查失败都写明「怎么修」而不只是报错。
- 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
This commit is contained in:
QiuSW
2026-09-02 16:45:02 +08:00
co-authored by Claude Opus 5
parent d257752441
commit 080a77ab5d
3 changed files with 400 additions and 0 deletions
+7
View File
@@ -7,6 +7,13 @@
*.json text eol=lf
*.ps1 text eol=crlf
# 批处理脚本 Git 一律不做任何转换:
# - 必须是 CRLF 行尾,LF 会让 cmd 解析 goto 标签和多行块出错
# - 必须是 GBK 编码,cmd 用系统 ANSI 代码页解析 .bat,
# 存成 UTF-8 会让中文注释把命令行拆坏(实测会报「不是内部命令」)
# 用 -text 让 Git 按二进制原样存取,避免任何自动换行或编码转换。
*.bat -text
*.png binary
*.jpg binary
*.zip binary
+207
View File
@@ -0,0 +1,207 @@
@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
+186
View File
@@ -0,0 +1,186 @@
@echo off
setlocal
rem ============================================================
rem [编码提醒] 本文件必须保存为 GBK / ANSI 编码,CRLF 行尾。
rem 存成 UTF-8 会让 cmd 解析中文出错,脚本直接跑不起来。
rem 用 VS Code 编辑时,右下角编码要选 GB2312/GBK 再保存。
rem ============================================================
rem cmsp 开发模式启动脚本
rem
rem 双击本文件即可启动开发模式:改前端代码会自动刷新,
rem 改 Go 代码会自动重新编译。调试界面问题用这个,不要用 build.bat。
rem
rem 想打包成给同事用的 exe,请双击 build.bat。
rem
rem 遇到报错先看提示里的「怎么修」,照着做通常就好了。
rem 实在解决不了,把整个黑窗口截图发给维护者。
rem ============================================================
cd /d "%~dp0"
echo.
echo ============================================================
echo cmsp 开发模式
echo ============================================================
echo.
rem ---------- 检查 1:Go ----------
echo [1/5] 检查 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 本机 Go 可能低于 Wails 要求的版本,靠 GOTOOLCHAIN 自动下载补齐。
rem 这是 Go 官方机制,第一次构建会联网拉工具链,属于正常现象。
echo 提示:go.mod 要求的版本可能高于本机 Go,
echo Go 会自动下载对应工具链,第一次需要联网。
rem ---------- 检查 2:Node ----------
echo [2/5] 检查 Node.js ...
where node >nul 2>nul
if errorlevel 1 (
echo.
echo [X] 没有找到 node 命令。
echo.
echo 怎么修:
echo 1. 到 https://nodejs.org/ 下载 LTS 版本并安装
echo 2. 装完关掉这个窗口,重新双击本脚本
echo.
goto :fail
)
for /f %%v in ('node --version') do set NODEVER=%%v
echo OK %NODEVER%
rem ---------- 检查 3:Wails CLI ----------
echo [3/5] 检查 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:配置文件 ----------
echo [4/5] 检查配置文件 ...
if not exist "config.yaml" (
echo config.yaml 不存在,从模板复制一份 ...
if exist "config.example.yaml" (
copy /y "config.example.yaml" "config.yaml" >nul
echo 已生成 config.yaml
echo.
echo 注意:里面的账号密码还是模板里的占位值。
echo 程序启动后到「参数设置」页填真实账号,
echo 或者直接用记事本编辑 config.yaml。
echo.
) else (
echo 没有 config.example.yaml,跳过。
echo 程序会用内置默认值启动,到「参数设置」页填即可。
)
) else (
echo OK config.yaml 已存在
)
rem ---------- 检查 5:前端依赖 ----------
echo [5/5] 检查前端依赖 ...
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.
echo ============================================================
echo 一切就绪,正在启动开发模式 ...
echo.
echo 窗口打开后:
echo - 改 frontend\src 下的文件,界面会自动刷新
echo - 改 .go 文件,程序会自动重新编译并重启
echo - 按 Ctrl+C 或关掉这个黑窗口即可停止
echo.
echo 第一次启动要编译,可能等十几秒,属于正常。
echo ============================================================
echo.
"%WAILS%" dev
set RESULT=%errorlevel%
if not "%RESULT%"=="0" (
echo.
echo [X] 开发模式异常退出,错误码 %RESULT%
echo.
echo 常见原因:
echo - Go 代码有编译错误:往上翻,找红色的报错行
echo - 端口被占用:关掉之前没退干净的 cmsp 窗口再试
echo - 依赖没下全:执行 go mod download 后重试
echo.
goto :fail
)
echo.
echo 开发模式已退出。
goto :done
:fail
echo.
echo ============================================================
echo 启动失败。上面写了怎么修,照着做通常就好。
echo 解决不了就把这个窗口截图发给维护者。
echo ============================================================
echo.
pause
exit /b 1
:done
echo.
pause
exit /b 0