【问题标题】:Failed to generate pb file when using proto3 version.[Nodejs]使用proto3版本时生成pb文件失败。[Nodejs]
【发布时间】:2021-03-15 09:44:00
【问题描述】:

1.I yarn add grpc-tools.

2.cmd 命令:protoc --js_out=import_style=commonjs,binary:./ --plugin=protoc-gen-grpc=./grpc_node_plugin.exe --grpc_out=./ UHDInterface.proto

3.终于报错了

UHDInterface.proto:是一个包含可选字段的 proto3 文件,但代码生成器 protoc-gen-grpc 尚未更新以支持 proto3 中的可选字段。请询问此代码生成器的所有者是否支持proto3可选。--grpc_out

【问题讨论】:

    标签: grpc


    【解决方案1】:

    Protobuf

    proto3 完全支持optional protobuf 3.15.0 (experimental support was added in v3.12.0 but required passing in a --experimental_allow_proto3_optional flag to protoc)。

    我也觉得很奇怪,它还没有记录在 Language Guide (proto3) 中,但你可以在这里找到一些很棒的文档和示例 - Protobuf Field Presence

    gRPC

    要使用 optional 关键字从 proto 文件生成 gRPC 文件,请确保您使用的是最新的插件。对于 JavaScript,您可以使用 grpc-tools NPM 包中包含的可执行文件 - --plugin=protoc-gen-grpc_js=./node_modules/.bin/grpc_tools_node_protoc_plugin

    或者,对于其他语言(例如 Python 的 grpcio-tools 不幸的是不包含 grpc_python_plugin 可执行文件,但在 python -m grpc_tools.protoc 中包含此功能),您可以尝试 building the gRPC repo 获取二进制文件。

    如果有不清楚的地方请告诉我,我可以编辑!

    【讨论】:

      【解决方案2】:

      proto3 不再支持消息定义中的optionalrequired,只需删除UHDInterface.proto 中的这些字段

      您可以参考why messge type remove 'required,optional'?了解更多详情。

      【讨论】:

      • 我的同事说optional是在最新版本中添加的。所以,我想问问这是不是真的?或者我在哪里可以看到最新版本的信息?谢谢
      • 只信任Language Guide (proto3)中的官方文档
      【解决方案3】:

      您的同事是对的,您可以将 optional 与 protobuf 一起使用,因为 Ayush 之前已链接过 v3.15.0。

      您的特殊问题是因为您需要在依赖关系树中更新 io.grpc:protoc-gen-grpc-java

      我在 Maven 中使用 v3.15.0,必须更新我的 io.grpc:protoc-gen-grpc-java,如下所示:

      <pluginArtifact>
        io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}
      </pluginArtifact>
      

      ${grpc.version} = 1.31.0。在their repo中查看更多信息

      【讨论】:

      猜你喜欢
      • 2023-04-01
      • 2012-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-02
      • 2010-09-07
      相关资源
      最近更新 更多