归档任务需显式指定产物路径、避免源码和中间文件混入,用find或get-childitem精确筛选目标文件,归档与清理必须分离为独立任务,不可合并执行。

tasks.json 里怎么写归档任务才不会漏文件
归档不是简单打包当前目录,而是要明确哪些是产物、哪些是源码。常见错误是用 tar -czf archive.tgz *,结果把 .vscode/、node_modules/、build/ 以外的中间文件全塞进去,体积膨胀且不可复现。
- 必须用
find或ls显式列出目标路径,比如find build/ -type f -name "*.so" -o -name "*.exe" -o -name "*.jar" - 归档命令前加
cd ${workspaceFolder},避免相对路径错位;Windows 用户用pushd/popd替代 - 别依赖
$(date +%Y%m%d)命名——任务并发时可能撞名,改用$(git rev-parse --short HEAD 2>/dev/null || echo "dirty")更可靠 - 归档后建议校验:在
&&链末尾加sha256sum archive.tgz,输出哈希值供后续比对
清理动作必须和归档严格解耦
很多人把 rm -rf build/ 和归档写进同一个 task,结果归档失败时产物也被删了——这不是“自动清理”,是“自动丢代码”。
基于三引擎设计,从微信文章、新闻和博客网页提取干净内容,支持标题作者日期元数据,多格式和批量处理。
- 归档任务(label: "archive")只负责打包、校验、移动,不删任何东西
- 清理任务(label: "clean")单独定义,且必须设
"group": "build",方便 Ctrl+Shift+B 一键触发 - 如果想“归档完立刻清”,用
"dependsOn": ["archive"]指向 clean 任务,而不是合并成一条命令 - Windows 下清理不能只靠
rmdir /s /q build,得加2>nul吞掉“系统找不到指定路径”这类非致命错误,否则整个链中断
跨平台归档命令怎么写才不出错
Linux/macOS 用 tar,Windows 默认没这命令,硬写会直接报 /bin/sh: tar: not found。
- 统一用
"type": "shell",别用"type": "process"——后者不支持&&和管道 - Linux/macOS 示例:
"command": "cd ${workspaceFolder} && find build/ -type f \( -name '*.so' -o -name '*.exe' \) | tar -czf dist/archive-$(git rev-parse --short HEAD 2>/dev/null).tgz -T -" - Windows 示例(PowerShell):
"command": "powershell", "args": ["-Command", "Get-ChildItem -Path '${workspaceFolder}\build' -Include '*.dll', '*.exe' | ForEach-Object { Compress-Archive -Path $_.FullName -DestinationPath '${workspaceFolder}\dist\archive-$((git rev-parse --short HEAD) -replace '[^a-zA-Z0-9]', '').zip' }"] - 远程开发(SSH/WSL)默认走 Linux 路径逻辑,无需额外判断;但若用 Windows Subsystem for Linux,注意
${workspaceFolder}是 Windows 路径,需用wslpath -u转换
preLaunchTask 不适合做归档或清理
launch.json 里的 preLaunchTask 只负责调试前准备,它不关心你是否归档、是否清理干净——只要那个 label 对应的任务退出码是 0,就认为成功。
- 归档是构建后置动作,应该由构建任务(如
"group": "build")完成后再手动触发,或用外部 CI 工具调用 - 如果你把归档写进
preLaunchTask,每次 F5 都会重打一遍包,浪费时间还污染dist/ - 清理动作若放在
preLaunchTask,会导致调试时反复删产物,而你真正需要的是“构建完再清”,不是“调试前清” - 唯一合理场景:调试前清理临时日志文件(如
rm -f *.log),但这类操作建议写进独立 task,别混进构建流










