node gRPC *.proto 生成 js/ts打赏

最近项目增加node的bff(Backends For Frontends)层,后端用了golang&gRPC。node端使用了nestjs框架,为了ts能够识别proto定义的接口,希望通过proto生成gRPC接口文件,期间绕了不少弯路,简单分享下。

首先组内同学找到这个库
https://github.com/agreatfool/grpc_tools_node_protoc_ts
按照示例,命令如下,发现不好用

npm install grpc_tools_node_protoc_ts --save-dev

# generate js codes via grpc-tools
grpc_tools_node_protoc \
--js_out=import_style=commonjs,binary:./your_dest_dir \
--grpc_out=./your_dest_dir \
--plugin=protoc-gen-grpc=`which grpc_tools_node_protoc_plugin` \
-I ./proto \
./your_proto_dir/*.proto

# generate d.ts codes
protoc \
--plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts \
--ts_out=./your_dest_dir \
-I ./proto \
./your_proto_dir/*.proto

遂改造如下

grpc_tools_node_protoc --js_out=import_style=commonjs,binary:./src/types \
                       --grpc_out=./src/types \
                       --plugin=protoc-gen-grpc=`which grpc_tools_node_protoc_plugin` \
                       -I ./proto proto/*.proto
grpc_tools_node_protoc --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts \
                       --ts_out=./src/types \
                       -I ./proto ./proto/*.proto

结果发现还是不好用,最后仔细看了
https://github.com/grpc/grpc-node
又阅读了部分nestjs源码,发现是我们理解错了,项目上用的是nestjs封装的gRPC,而其采用的并不是预生成代码的形式,运行时需要加载proto源码动态解析

于是找到了nestjs所封装的形式对应所需的client interface生成工具
https://github.com/kondi/rxjs-grpc

总结:第二种方案虽然轻量,但性能肯定不如第一种,但nestjs默认实例化方式选择了这种,为了沿用其rxjs返回形式,暂时直接采用了官方方案,其实也可以通过对客户端进行二次封装达到rxjs的效果(第一种方案生成的客户端是回调函数形式,没有进行封装)

简单记录下,方便有此需求的同学填坑

node gRPC *.proto 生成 js/ts
文章《node gRPC *.proto 生成 js/ts》二维码
  • 微信打赏
  • 支付宝打赏

已有5条评论

  1. 游客 371

    改造后确实更好用了

    2021-03-03 18:27 回复
  2. 今日新鲜事

    文章不错非常喜欢

    2019-06-23 00:38 回复
  3. 百万套图一键转存

    写的真不错,能学到很多东西!

    2019-06-17 16:50 回复
  4. 超人下拉系统

    感谢分享,很不错的js文件

    2019-06-12 13:54 回复
  5. 游客 24

    来了一次又一次,总是情不自已!

    2019-06-09 09:46 回复

(必填)

(必填)

(可选)