protocolbuffers / protocolbuffers/protobuf-javascript

Public import is not included in generated CommonJS file

オープン
#55 コメント 3 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

enhancement javascript triaged
主要言語
JavaScript
スター
471
フォーク
91
平均マージ
3時間 57分
マージ済み PR(30日)
2

説明

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.

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

提供された protoc コマンドでケースを再現し、その後 build/project_pb.js と、id_pb および task_pb に対して生成された import を調べます。test.js を使って動作を確認します。project_pb.js で推移的な public import が利用可能になり、project.proto で明示的な import を要求せずにスクリプトが「Everything is fine」と出力すれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
javascript
領域
tooling
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
45/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。