尝试起床 & 运行 一个 Protobuf & JavaScript

Trying to get up & running with a Protobuf & JavaScript

我正在努力起床 运行 JavaScript & Protobuf。我克隆了这个存储库 (https://github.com/nyrobert/js-protobuf-example),它在 JavaScript 中提供了一个简单示例。它提供了一个简单的 Person 模式。


syntax = "proto3";

message Person {
    int64 id = 1;
    string name = 2;
    string email = 3;

    enum PhoneType {
        HOME = 0;
        WORK = 1;
    }

    message PhoneNumber {
        string number = 1;
        PhoneType type = 2;
    }

    repeated PhoneNumber phone = 4;
}

然后我用

编译了架构
$ protoc \
    --proto_path=protocol_buffers/definitions \
    --js_out=import_style=commonjs,binary:protocol_buffers/messages \
    protocol_buffers/definitions/person.proto

并尝试 运行

'use strict';

var message = require('./protocol_buffers/messages/person_pb');

var person = new message.Person();
person.setId(1);
person.setName('John Doe');
person.setEmail('john.doe@gmail.com');

但是遇到了

$ node index.js                                                                                                                                                                                                                                                                                                                                                                                      master
.../js-protobuf-example/protocol_buffers/messages/person_pb.js:402
  return jspb.Message.setProto3IntField(this, 1, value);
                      ^

TypeError: jspb.Message.setProto3IntField is not a function
    at proto.Person.setId (.../js-protobuf-example/protocol_buffers/messages/person_pb.js:402:23)
    at Object.<anonymous> (.../js-protobuf-example/index.js:8:8)
    at Module._compile (internal/modules/cjs/loader.js:1063:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
    at Module.load (internal/modules/cjs/loader.js:928:32)
    at Function.Module._load (internal/modules/cjs/loader.js:769:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
    at internal/main/run_main_module.js:17:47

知道这里发生了什么吗?我的 Node 版本是 14.15.4。我的 Protobuf 版本是

  "dependencies": {
    "google-protobuf": "^3.4.0"
  }

只需更改 package.json 中的 google-protobuf 版本:

"dependencies": {
  "google-protobuf": "3.15.8"
}