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》二維碼
  • 微信打賞
  • 支付寶打賞

已有3條評論

  1. 百萬套圖一鍵轉存

    寫的真不錯,能學到很多東西!

    2019-06-17 16:50 回復
  2. 超人下拉系統

    感謝分享,很不錯的js文件

    2019-06-12 13:54 回復
  3. 游客 24

    來了一次又一次,總是情不自已!

    2019-06-09 09:46 回復

(必填)

(必填)

(可選)

黑龙江22选5开奖