如何避免在 buf generate 上复制供应商原型依赖项

How to avoid copying vendor proto dependencies on buf generate

我正在测试 grpc-gateway 并试图找出在我的 grpc 服务中导入依赖项的最佳方法。我有以下目录结构:

proto/
  api.proto
  api2.proto
third_party/
  googleapis/
    google/
      api/
        http.proto
        annotations.proto
buf.yaml
buf.gen.yaml

buf.yaml 配置

version: v1beta1
build:
  roots:
    - third_party/googleapis
    - third_party/grpc-gateway
    - proto

两件事

我的问题是,每当我 运行 buf generate --path=./proto(请注意路径设置为目录)时,我都会在 [=18] 下复制 googleapis pb.go 个文件=] 文件夹。我觉得这很烦人,无法弄清楚我的设置有什么问题。如果我直接指定每个文件,一切都很好(例如buf generate --path=./proto/api.proto),没有复制第三方内容。

有没有办法忽略 buf generate 上的 third_party 文件夹,如果没有,是否有更好的方法来管理 grpc 依赖项。直接将文件复制到每个 grpc 项目中对我来说确实有意义。

好的,明白了。 通常,您要么重用 go/src 文件夹中的原型(由于回购更新,它有缺点),或者将它们复制到 proto/dependency-x 文件夹中。

我发现 buf 在这里采用了更好的方法,但您必须遵循原型结构指南,简而言之:structure proto files under same root, in different packets。因此,为了避免复制,我必须具有以下结构:

proto/
  api/ <- add one more level
    api.proto
    api2.proto
third_party/
  googleapis/
    google/
      api/
        http.proto
        annotations.proto
buf.yaml
buf.gen.yaml

并将缓冲区指向 api 文件夹,如下所示:buf generate --path=./proto/api