记在Windows平台上将proto翻译为JS的一个小坑

栏目: 服务器 · 发布时间: 5年前

内容简介:研究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 文件中。生成这些文件的命令如下(假设 protocgrpc_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 如果直接用这个也是可以的。鼓捣了半天还水了一篇博文。

(逃


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

新物种爆炸

新物种爆炸

吴声 / 中信出版社 / 2017-7-30 / 58.00元

宝马为什么要重点发展共享汽车 Airbnb正试图成为内容和社交平台 不排队、不结账、没有收银员的颠覆传统超市 茑屋书店要打造全新生活方式 基于新的商业环境与技术条件的变化,必须会产生新的品类和商业模式,这就是新物种! 大数据与人工智能等技术正在创建新的商业话语体系,创建新的权力架构,引领第四新物种爆炸。商业规则正在快速发生变化,新的模式与业态层出不穷。 要么成为......一起来看看 《新物种爆炸》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具