buf.build 是现在主流的 Protocol Buffers 规范化、版本管理与发布平台。 无论是单机开发还是企业 CI/CD 场景,它都能让 *.proto 文件像 npm 包一样统一管理。
适合 Flutter、Go、Dart、Rust、Python 等多语言开发环境。
🧭 Buf.build 使用笔记(2025 实用整理版)
✨ 一、Buf 是什么
Buf 是一个针对 Protocol Buffers(Protobuf) 生态的工具链与云平台,提供:
| 功能 | 说明 |
|---|---|
buf lint |
检查 Protobuf 文件风格规范(统一命名、包结构) |
buf breaking |
检查 API 向后兼容性(避免破坏性变更) |
buf build |
统一生成 .bin 格式描述符集 |
buf generate |
自动生成多语言代码 |
buf registry |
类似 GitHub,用于托管 .proto 文件与版本发布 |
buf.yaml / buf.gen.yaml |
项目配置文件,定义结构与生成方案 |
⚙️ 二、安装与初始化
🧩 安装 CLI
Windows
powershell
choco install buf
或使用 Scoop:
powershell
scoop install buf
Mac / Linux
bash
brew install buf
或:
bash
curl -sSL https://github.com/bufbuild/buf/releases/latest/download/buf-WINDOWS-x86_64.exe -o buf.exe
确认版本:
bash
buf --version
🚀 初始化项目
进入你的 proto 根目录:
bash
cd proto/
buf init
这会生成:
yaml
# buf.yaml
version: v2
modules:
- path: .
再添加生成配置:
bash
touch buf.gen.yaml
示例:
yaml
version: v2
plugins:
- plugin: buf.build/protocolbuffers/python
out: gen/python
- plugin: buf.build/protocolbuffers/go
out: gen/go
- plugin: buf.build/community/dart
out: gen/dart
📁 三、推荐项目结构
csharp
proto/
├── buf.yaml
├── buf.gen.yaml
├── buf.lock
├── example.proto
├── google/
│ └── api/
│ └── annotations.proto
└── mypackage/
├── message.proto
├── service.proto
└── types.proto
🧪 四、常用命令
| 命令 | 功能 |
|---|---|
🩰 buf lint |
检查命名、包名、service 格式 |
🧱 buf build |
生成中间描述文件(buf.bin) |
🔄 buf generate |
根据 buf.gen.yaml 生成多语言代码 |
🧩 buf breaking --against ... |
比较与上次发布版本是否兼容 |
🚢 buf push |
将当前 module 发布到 buf.build |
📥 buf export |
下载远程仓库的 proto 文件 |
🎯 五、与 buf.build 注册中心配合使用
-
登录
bashbuf login(首次会要求访问 buf.build 复制 Token)
-
创建仓库(类似 GitHub) 在 buf.build → "New Repository"
-
推送模块
bashbuf push buf.build/<organization>/<repository> -
拉取别人模块
bashbuf export buf.build/googleapis/googleapis --output ./third_party
Buf 会自动管理依赖 resolution(在 buf.lock 中记录版本和哈希)。
🧰 六、常见文件说明
buf.yaml
项目自身的配置:
yaml
version: v2
modules:
- path: .
deps:
- buf.build/googleapis/googleapis
lint:
use:
- DEFAULT
breaking:
use:
- FILE
buf.gen.yaml
生成配置示例:
yaml
version: v2
managed:
enabled: true
plugins:
- plugin: buf.build/protocolbuffers/go
out: gen/go
- plugin: buf.build/community/dart
out: gen/dart
🧩 七、Dart 与 Flutter 集成示例
在 pubspec.yaml 中添加依赖:
yaml
dependencies:
protobuf: ^3.1.0
grpc: ^3.2.4
生成 Dart 代码:
bash
buf generate
生成后文件位置:
markdown
lib/
└── proto/
└── mypackage.pb.dart
🧠 八、最佳实践笔记
| 场景 | 建议 |
|---|---|
| 多人协作开发 proto | 使用 buf lint & breaking,防止不兼容修改 |
| CI 检查 | 在 GitHub Actions 执行 buf lint、buf breaking |
| 开源接口依赖 | 使用 buf.build/googleapis/googleapis 代替手动下载 .proto |
| 本地构建多语言 SDK | 修改 buf.gen.yaml 支持多 plugin 输出 |
| Flutter + Rust/Go 后端共用协议 | 一次定义,buf generate 多端生成 |
🧩 九、CI/CD 集成示例(GitHub Actions)
.github/workflows/buf.yaml:
yaml
name: buf check
on: [push, pull_request]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: bufbuild/buf-action@v1
with:
args: lint
breaking:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: bufbuild/buf-action@v1
with:
args: breaking --against buf.build/myorg/myrepo
🧾 十、资源
| 链接 | 内容 |
|---|---|
| 🏠 buf.build | 官方主站 |
| 📘 docs.buf.build | 官方文档 |
| 🧰 github.com/bufbuild/bu... | CLI 源码 |
| 🪄 Protobuf 官方 | 语法和编译器规范 |
🔚 总结
Buf.build 是 Protobuf 的现代化解决方案, 核心价值是------一致性(Lint)、安全演进(Breaking)、多语言生成、集中化发布。 掌握以下 4 条命令,你就几乎能完成全部常见任务:
bash
buf mod update # 更新依赖
buf lint # 检查规范
buf generate # 生成代码
buf push # 发布到 registry
提示: 如果版本不匹配,可以降版本。具体操作如下:
buf.gen.yaml
yaml
version: v1
plugins:
- plugin: buf.build/protocolbuffers/dart:v22.5.0
out: lib/protos/raw/src
直接复制上面的 buf.build/protocolbuffers/dart 到浏览器,然后测试不同的版本
