Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Public import is not included in generated CommonJS file #55

Open
mdrachuk opened this issue Feb 24, 2019 · 3 comments
Open

Public import is not included in generated CommonJS file #55

mdrachuk opened this issue Feb 24, 2019 · 3 comments
Labels
enhancement New feature or request javascript triaged Issue has been triaged

Comments

@mdrachuk
Copy link

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.

@BSBandme
Copy link

How did you generate the proto file?
Have you tried this out flag: --js_out=import_style=commonjs,binary ?

@mdrachuk
Copy link
Author

mdrachuk commented Feb 25, 2019

@BSBandme, yes, check step 2 in “Steps to reproduce”.

@acozzette acozzette transferred this issue from protocolbuffers/protobuf May 16, 2022
@dibenede dibenede added enhancement New feature or request triaged Issue has been triaged labels Sep 23, 2022
@dibenede
Copy link
Contributor

We don't support public imports, but this is a reasonable feature request.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request javascript triaged Issue has been triaged
Projects
None yet
Development

No branches or pull requests

4 participants