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

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

内容简介:研究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 如果直接用这个也是可以的。鼓捣了半天还水了一篇博文。

(逃


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

查看所有标签

猜你喜欢:

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

裂变式创业

裂变式创业

宗毅、小泽 / 机械工业出版社 / 2016-1-1 / 39.84

互联网大潮汹涌来袭,传统企业增长乏力,互联网公司跨界冲击,转型之路迫在眉睫。“转型找死,不转型等死”这一坊间传说让多数企业徘徊不前,不少实体经济面临困境,敢问路在何方? 宗毅独创裂变式创业,用人民币投票选总经理,规定自己不投钱不能参与竞选;不相信干股,不使用职业经理人,用金融的方式管理现金流。用商业模式颠覆传统公益,打通南北充电之路;摇身一变成为自媒体,用产品建立社群。自己写故事,自己当导演......一起来看看 《裂变式创业》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

URL 编码/解码
URL 编码/解码

URL 编码/解码