Protobuf 没法通过 --js_out 生成 JS 代码

965 阅读1分钟

报错现场

$ protoc --js_out=./js_protobuf ./protobuf/
protoc-gen-js: program not found or is not executable
Please specify a program using absolute path or make sure the program is available in your PATH system variable
--js_out: protoc-gen-js: Plugin failed with status code 1.

分析

网上查找了关于这方面的信息,最终找到了这个:

接下来是要知道怎么通过编译上边提到的库,来解决最开始的问题。

编译protobu-javascript源代码

$ git clone https://github.com/protocolbuffers/protobuf-javascript
$ cd protobuf-javascript/
# 这里可能要多运行几次,我前面运行了几次都是超时后结束了。
$ bazel build //generator:protoc-gen-js

构建好了之后,protoc-gen-js的可执行文件位于bazel-bin/generator/

$ ls bazel-bin/generator/protoc-gen-js
bazel-bin/generator/protoc-gen-js

使用

接下来当我们需要使用 protoc 命令来生成 JavaScript 代码时,只需要在命令后面带上 --plugin={编译的目录}/bazel-bin/generator/protoc-gen-js 选项即可。

例如这样:

  • /usr/local/protobuf-javascript/ 是编译 protobuf-javascript 的目录。
$ protoc --plugin=/usr/local/protobuf-javascript/bazel-bin/generator/protoc-gen-js --js_out=./protobuf ./xx.proto

(-: 成功生成 JavaScript 代码。