










参考项目:D:\code\go-homework。
Taskfile 把零散命令收进一个 YAML 文件,通过 task 命令统一执行。开发并行启动,打包顺序执行。
D:\code\go-homework\taskfile.ymlD:\code\go-homework\.air.tomlD:\code\go-homework\static\fe-project\package.jsonD:\code\go-homework\main.go本目录附有原始配置副本: go-homework-taskfile.source.yml。这是记录时的快照,后续以项目内源文件为准。
在项目根目录执行:
| 命令 | 执行链路 |
|---|---|
task install |
前端 pnpm i → 后端 go mod tidy |
task dev |
并行启动 air 和 pnpm run dev |
task build |
pnpm run build → swag init -d ./ --pd → go build |
直接运行 task 会通过 default 任务启动开发环境。
task dev
├── dev-backend → air → Go 编译、运行,修改后重新构建
└── dev-frontend → pnpm run dev → Vite 开发服务
两个任务通过 deps 并行启动。Air 如何编译和监听文件由 .air.toml 决定;Vite 如何启动由前端 package.json 的 dev 脚本决定。
注意:Go 代码使用 embed,因此首次启动后端前需要已有前端 dist;全新检出后可先构建一次前端。
task build
→ 进入 static/fe-project 执行 pnpm run build
→ 生成 dist 网页资源
→ 回到项目根目录生成 Swagger
→ go build 编译 Go,同时 embed 网页资源
→ 输出 dist/go-homework
顺序不能倒:Go 必须嵌入本次前端构建生成的文件。
原配置输出名为 dist/go-homework;Windows 使用时可改成 dist/go-homework.exe。
以下是按当前项目目录整理的 Windows 示例,省略原文件中未被任务使用的 Python 变量和日志命令:
version: '3'
tasks:
default:
cmds:
- task: dev
install:
cmds:
- task: install-frontend
- go mod tidy
install-frontend:
internal: true
dir: static/fe-project
cmds:
- pnpm i
dev:
deps: [dev-backend, dev-frontend]
dev-backend:
internal: true
cmds:
- air
dev-frontend:
internal: true
dir: static/fe-project
cmds:
- pnpm run dev
build:
cmds:
- task: build-frontend
- swag init -d ./ --pd
- go build -ldflags="-s -w" -o ./dist/go-homework.exe .
build-frontend:
internal: true
dir: static/fe-project
cmds:
- pnpm run build
复用时修改前端目录、程序名;没有 Swagger 的项目去掉 swag init。Air 配置和前端 scripts 也需要在新项目中准备好。
| 写法 | 作用 |
|---|---|
deps: [a, b] |
并行执行依赖任务,适合启动前后端服务 |
cmds |
按列出的顺序执行,适合先构建前端再编译 Go |
dir |
指定任务的工作目录,不用手动切换目录 |
internal: true |
声明内部任务,供其他任务调用 |
deps 会在本任务的 cmds 之前执行并等待其完成。原文件 dev 中的提示语写在 cmds,前后端常驻运行期间通常不会执行到它;启动提示可以放到各个子任务里。
开发和构建机器需要安装 Task、Go、Node.js、pnpm;当前任务还使用 Air 和 Swag。Taskfile 负责调度命令,不会自动安装这些工具。
打包后的程序运行时不需要 Task、Air 或前端构建工具。
当前 task build 只负责构建产物,没有上传服务器、替换旧文件或重启服务等部署动作。
记忆口诀:install 装依赖,dev 用 deps 并行,build 用 cmds 串行;Task 管流程,embed 管打包。
taskfile.yml
version: '3'
output: prefixed
vars:
VENV_BIN: '{{if eq OS "windows"}}.venv/Scripts{{else}}.venv/bin{{end}}'
PYTHON: '{{.VENV_BIN}}/python'
tasks:
default:
desc: "启动"
cmds:
- task: dev
dev:
desc: "启动开发环境"
cmds:
- "echo ✈ 启动开发环境..."
deps: [dev-backend, dev-frontend]
install:
desc: "安装依赖"
cmds:
- task: install-frontend
- task: install-backend
build:
desc: "构建前后端"
cmds:
- task: build-frontend
- task: build-backend
# ---隐形命令,服务于上边---
install-frontend:
internal: true # internal 表示这是内部任务,用户敲 task --list 时不会显示它
desc: "安装前端依赖"
dir: static/fe-project
cmds:
- pnpm i
install-backend:
internal: true
desc: "安装后端依赖"
cmds:
- go mod tidy
dev-frontend:
internal: true
desc: "启动前端"
dir: static/fe-project
cmds:
- "echo 🚀 启动前端"
- pnpm run dev
dev-backend:
internal: true
desc: "启动后端"
cmds:
- "echo 🚀 启动后端"
- air
build-frontend:
internal: true
desc: "构建前端"
dir: static/fe-project
cmds:
- pnpm run build
build-backend:
internal: true
desc: "构建后端"
cmds:
- swag init -d ./ --pd
- go build -ldflags="-s -w" -o ./dist/go-homework .
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。