Flutter项目使用 buf.build

411 阅读3分钟

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
choco install buf

或使用 Scoop:

scoop install buf
Mac / Linux
brew install buf

或:

curl -sSL https://github.com/bufbuild/buf/releases/latest/download/buf-WINDOWS-x86_64.exe -o buf.exe

确认版本:

buf --version

🚀 初始化项目

进入你的 proto 根目录:

cd proto/
buf init

这会生成:

# buf.yaml
version: v2
modules:
  - path: .

再添加生成配置:

touch buf.gen.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

📁 三、推荐项目结构

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 注册中心配合使用

  1. 登录

    buf login
    

    (首次会要求访问 buf.build 复制 Token)

  2. 创建仓库(类似 GitHub) 在 buf.build → “New Repository”

  3. 推送模块

    buf push buf.build/<organization>/<repository>
    
  4. 拉取别人模块

    buf export buf.build/googleapis/googleapis --output ./third_party
    

Buf 会自动管理依赖 resolution(在 buf.lock 中记录版本和哈希)。


🧰 六、常见文件说明

buf.yaml

项目自身的配置:

version: v2
modules:
  - path: .
deps:
  - buf.build/googleapis/googleapis
lint:
  use:
    - DEFAULT
breaking:
  use:
    - FILE

buf.gen.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 中添加依赖:

dependencies:
  protobuf: ^3.1.0
  grpc: ^3.2.4

生成 Dart 代码:

buf generate

生成后文件位置:

lib/
  └── proto/
       └── mypackage.pb.dart

🧠 八、最佳实践笔记

场景建议
多人协作开发 proto使用 buf lint & breaking,防止不兼容修改
CI 检查在 GitHub Actions 执行 buf lintbuf breaking
开源接口依赖使用 buf.build/googleapis/googleapis 代替手动下载 .proto
本地构建多语言 SDK修改 buf.gen.yaml 支持多 plugin 输出
Flutter + Rust/Go 后端共用协议一次定义,buf generate 多端生成

🧩 九、CI/CD 集成示例(GitHub Actions)

.github/workflows/buf.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 条命令,你就几乎能完成全部常见任务:

buf mod update     # 更新依赖
buf lint           # 检查规范
buf generate       # 生成代码
buf push           # 发布到 registry

提示: 如果版本不匹配,可以降版本。具体操作如下:

buf.gen.yaml

version: v1
plugins:
  - plugin: buf.build/protocolbuffers/dart:v22.5.0
    out: lib/protos/raw/src

直接复制上面的 buf.build/protocolbuffers/dart 到浏览器,然后测试不同的版本

image.png