带有 protoc_builtin PHP 的 Buf 与实际的 protoc 插件有不同的行为?

问题描述 投票:0回答:1

我正在将使用 protoc 的 PHP 项目迁移到 Buf CLI。为了确保向后兼容性,我试图让 Buf 产生与内置 PHP 插件或多或少完全相同的输出。 我已将

buf.gen.yaml
配置为使用
protoc_builtin: php
作为目标插件,并省略了任何选项,因为 protoc 之前也没有接受任何参数。

当我运行

buf generate
时,但 GPBMetadata 二进制文件现在位于错误的目录中。 protoc 将它们放在输出顶层的目录中,复制目录结构(甚至不是包路径,只是目录)。

这是我的目录结构:

src
| users
    | user.proto
| items
    | user_item.proto

这是我的配置:

version: v2

managed:
  enabled: true

inputs:
  - directory: .
    paths:
      - src

plugins:
  - protoc_builtin: php
    out: buf_out

运行

buf generate
(使用上述配置)会产生以下输出:

buf_out
| Users
    | User.php
    | Metadata
        | User.php
| Items
    | UserItem.proto
        | Metadata
            | UserItem.php

运行

protoc -I=. php_out=builtin_out $(find src -type f -name '*proto')
会产生这样的结果:

builtin_out
| Metadata
    | Users
        | User.php
    | Items
        | User_item.proto
| Users
    | User.php
| Items
    | User_item.proto

还要注意蛇形转换的差异。显然,Buf 所做的事情比它的文档告诉我们的要多。

Buf 是否有任何标志可以让我恢复到协议行为。或者我不知何故版本错误? (顺便说一句,使用 1.45.0)

php protocol-buffers protoc buf
1个回答
0
投票

您需要关闭托管模式才能获得与 protoc 及其内置插件相同的行为。

在托管块内的

buf.gen.yaml
中设置
enabled: false
或完全删除该块。

© www.soinside.com 2019 - 2024. All rights reserved.