Skip to content

Public import is not included in generated CommonJS file #55

Open
@mdrachuk

Description

@mdrachuk

System

Version: v3.6.1
Language: Javascript
macOS 10.14

Steps to reproduce

  1. Create a src directory with 3 files:
    // id.proto
    syntax = "proto3";
    
    message Id {
      string value = 1;
    }
    // task.proto adding a transitive import for `Id`
    syntax = "proto3";
    import public "id.proto";
    
    message Task {
      Id id = 1;
    }
    // project.proto importing both `Id` and `Task` from Project
    syntax = "proto3";
    import "task.proto";
    
    message Project {
      Id id = 1;
      repeated Task task = 2;
    }
  2. Compile to js using
    mkdir build
    protoc --proto_path=src --js_out=import_style=commonjs,binary:build id.proto task.proto project.proto 
  3. npm install google-protobuf under the root directory.
  4. node test.js
    // test.js
    var id_pb = require('./build/id_pb');
    var project_pb = require('./build/project_pb');
    
    var id = new id_pb.Id();
    id.setValue("Everything is fine");
    
    var project = new project_pb.Project()
    project.setId(id);
    
    process.stdout.write(project.getId().getValue());
    process.stdout.write("\n");

Expected behaviour

Everything is fine is printed to the console.

Actual behaviour

.../test-proto/build/project_pb.js:173
    jspb.Message.getWrapperField(this, id_pb.Id, 1));
                                       ^

ReferenceError: id_pb is not defined
    at proto.Project.getId (.../test-proto/build/project_pb.js:173:40)
    at Object.<anonymous> (.../test-proto/test.js:10:30)
    at Module._compile (internal/modules/cjs/loader.js:688:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:699:10)
    at Module.load (internal/modules/cjs/loader.js:598:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
    at Function.Module._load (internal/modules/cjs/loader.js:529:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:741:12)
    at startup (internal/bootstrap/node.js:285:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:739:3)

id_pb import is missing from project_pb. Alternatively it may be referenced from task_pb, since it’s declared public in task.proto.

The error does not show up if id.proto is explicitly imported in project.proto.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions