惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
美团技术团队
Recent Announcements
Recent Announcements
B
Blog
GbyAI
GbyAI
雷峰网
雷峰网
博客园_首页
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
Tailwind CSS Blog
M
MIT News - Artificial intelligence
V
V2EX
人人都是产品经理
人人都是产品经理
爱范儿
爱范儿
L
LangChain Blog
Microsoft Security Blog
Microsoft Security Blog
宝玉的分享
宝玉的分享
A
About on SuperTechFans
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
U
Unit 42
Hugging Face - Blog
Hugging Face - Blog
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
Last Week in AI
Last Week in AI
aimingoo的专栏
aimingoo的专栏

博客园 - 丁少华

adb提取本机apk 安卓ADB调试安卓 高德地图车机版本9.5制作共存 Taskfile 拆分子文件 Go 内嵌网页 windows的终端像mac一样好用 pgsql指定用户看到某个表 vue不使用根组件 Huma + Orval 前后端 API 自动生成方案 Mac安装nginx 不喜欢Go的几点 代码写错分支拯救指南 React UI 库推荐 Loop Engineering Vue 3 UI 组件库 Neon白嫖免费pgsql 域名利用cloudflare免费图床 nginx反代CloudflarePages提示502 vite使用shadcn vite使用biome Window下Nginx winserver2022安装不上软件 mac已损坏无法打开 代码高亮 命令运行器之task 命令运行器之just windows开启wsl 白嫖Redis 白嫖MongoDB vercel无服务函数
go项目的taskfile
丁少华 · 2026-09-06 · via 博客园 - 丁少华

Taskfile:Go + 前端项目开发与打包备忘

参考项目:D:\code\go-homework

Taskfile 把零散命令收进一个 YAML 文件,通过 task 命令统一执行。开发并行启动,打包顺序执行。

源文件位置

  • 主配置:D:\code\go-homework\taskfile.yml
  • 后端热重载配置:D:\code\go-homework\.air.toml
  • 前端 dev/build 脚本:D:\code\go-homework\static\fe-project\package.json
  • 前端资源嵌入入口:D:\code\go-homework\main.go

本目录附有原始配置副本: go-homework-taskfile.source.yml。这是记录时的快照,后续以项目内源文件为准。

日常只记三个命令

在项目根目录执行:

命令 执行链路
task install 前端 pnpm i → 后端 go mod tidy
task dev 并行启动 airpnpm run dev
task build pnpm run buildswag init -d ./ --pdgo build

直接运行 task 会通过 default 任务启动开发环境。

开发链路

task dev
├── dev-backend → air → Go 编译、运行,修改后重新构建
└── dev-frontend → pnpm run dev → Vite 开发服务

两个任务通过 deps 并行启动。Air 如何编译和监听文件由 .air.toml 决定;Vite 如何启动由前端 package.jsondev 脚本决定。

注意: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 .