内容简介:研究PS:其实按照官方文档的说法应该是“预生成(pre-generated)”的,我的理解就是翻译过来,新人拙见,还请斧正。按照官方给的介绍
研究 gRPC
的时候,接触到了 proto
文件,现阶段我觉得这应该是一个可以翻译成各种语言、并且可以使用gRPC进行极其方便的远程调用的描述数据结构的文件。这次记录一下自己的愚蠢行为。
PS:其实按照官方文档的说法应该是“预生成(pre-generated)”的,我的理解就是翻译过来,新人拙见,还请斧正。
美好的开始
按照官方给的介绍 started with gRPC in Node ,挂上我的梯子把代码拔下来
$ # Clone the repository to get the example code $ git clone -b v1.14.1 https://github.com/grpc/grpc $ # Navigate to the dynamic codegen "hello, world" Node example: $ cd grpc/examples/node/dynamic_codegen $ # Install the example's dependencies $ npm install
开两个 shell 让他们表演一下如何传递一个word
$ node greeter_server.js (node:25752) DeprecationWarning: grpc.load: Use the @grpc/proto-loader module with grpc.loadPackageDefinition instead
$ node greeter_client.js (node:26288) DeprecationWarning: grpc.load: Use the @grpc/proto-loader module with grpc.loadPackageDefinition instead Greeting: Hello world
警告信息就不管它了, 又不是不能用 ,相关 issue#120
然而直接调用proto文件这并不是我想要的,翻译成js才行。
错误
之后,来到另外一个文件夹 static_codegen
。确认过文件头, *_pb.js
就是我想要的翻译结果。如何翻译出来呢?
打开 README.MD
This is the static code generation variant of the Node examples. Code in these examples is pre-generated using protoc and the Node gRPC protoc plugin, and the generated code can be found in various *_pb.js
files. The command line sequence for generating those files is as follows (assuming that protoc
and grpc_node_plugin
are present, and starting in the directory which contains this README.md file):
> cd ../../protos > npm install -g grpc-tools > grpc_tools_node_protoc --js_out=import_style=commonjs,binary:../node/static_codegen/ --grpc_out=../node/static_codegen --plugin=protoc-gen-grpc=`which grpc_tools_node_protoc_plugin` helloworld.proto > grpc_tools_node_protoc --js_out=import_style=commonjs,binary:../node/static_codegen/route_guide/ --grpc_out=../node/static_codegen/route_guide/ --plugin=protoc-gen-grpc=`which grpc_tools_node_protoc_plugin` route_guide.proto >
上面的英文渣翻一下
这是静态代码版本的Node程序示例。示例使用protoc工具和Node gRPC protoc插件预生成的代码,这些生成的代码就在各种 * _pb.js
文件中。生成这些文件的命令如下(假设 protoc
和 grpc_node_plugin
已经安装好了,并且现在正处在包含此README.md文件的目录开始))
按照命令一行一行进行。安装好了 grpc-tools
包。在将要执行下面的生成命令时我迟疑了一下。
这明明是 Linux 下的命令,你看这个目录,你看这个 which
命令。所以,把撇(/)换成捺(\),everthing找一下 grpc_tools_node_protoc_plugin
文件的位置得到 C:\Program Files\node-v10.3.0-win-x64\grpc_tools_node_protoc_plugin
,确认了一下,确实应该在PATH中能够被 which
找到。替换上执行一下
$ grpc_tools_node_protoc --js_out=import_style=commonjs,binary:..\node\static_codegen\ --grpc_out=..\node\static_codegen --plugin=protoc-gen-grpc="C:\Program Files\node-v10.3.0-win-x64\grpc_tools_node_protoc_plugin" helloworld.proto
一个回车敲下去。
--grpc_out: protoc-gen-grpc: %1 ������Ч�� Win32 Ӧ�ó��� C:\Program Files\node-v10.3.0-win-x64\node_modules\grpc-tools\bin\protoc.js:41 throw error; ^ Error: Command failed: C:\Program Files\node-v10.3.0-win-x64\node_modules\grpc-tools\bin\protoc.exe --plugin=protoc-gen-grpc=C:\Program Files\node-v10.3.0-win-x64\node_modules\grpc-tools\bin\grpc_node_plugin.exe --js_out=import_style=commonjs,binary:..\node\static_codegen\ --grpc_out=..\node\static_codegen --plugin=protoc-gen-grpc=C:\Program Files\node-v10.3.0-win-x64\grpc_tools_node_protoc_plugin helloworld.proto --grpc_out: protoc-gen-grpc: %1 ������Ч�� Win32 Ӧ�ó��� at ChildProcess.exithandler (child_process.js:291:12) at ChildProcess.emit (events.js:182:13) at maybeClose (internal/child_process.js:961:16) at Socket.stream.socket.on (internal/child_process.js:380:11) at Socket.emit (events.js:182:13) at Pipe._handle.close [as _onclose] (net.js:596:12)
Windows喜闻乐见的编码问题,应该能猜到,乱码部分意思应该是: 不是有效的 Win32 应用程序。
然后经过一番Google。我发现了一个相似的问题 Where to find the protoc grpc plugin for Node.js to run on Windows ?
然后发现他用的是 grpc_node_plugin
everthing一下,找到 C:\Program Files\node-v10.3.0-win-x64\node_modules\grpc-tools\bin\grpc_node_plugin.exe
看着这个正常多了,应该是一个Win 32程序了。修改命令如下:
$ grpc_tools_node_protoc --js_out=import_style=commonjs,binary:..\node\static_codegen\ --grpc_out=..\node\static_codegen --plugin=protoc-gen-grpc="C:\Program Files\node-v10.3.0-win-x64\node_modules\grpc-tools\bin\grpc_node_plugin.exe" helloworld.proto
成功。
后记
被自己蠢死,打开 C:\Program Files\node-v10.3.0-win-x64\grpc_tools_node_protoc_plugin
看了一下,里面是 bash
脚本。同时还存在一个 C:\Program Files\node-v10.3.0-win-x64\grpc_tools_node_protoc_plugin.cmd
如果直接用这个也是可以的。鼓捣了半天还水了一篇博文。
(逃
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- SwiftWasm - 将Swift编译为WebAssembly的工具
- 关于sqlmap的两个小坑
- 很简单的Flutter填小坑
- EF Core HasQueryFilter 的小坑
- dotnet core 使用 CoreRT 将程序编译为 Native 程序
- Go:json.Unmarshal 遇到的小坑
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。