protocolbuffers / protocolbuffers/protobuf-javascript
Public import is not included in generated CommonJS file
オープン
まだ誰も着手していません。
enhancement
javascript
triaged
- 主要言語
- JavaScript
- スター
- 471
- フォーク
- 91
- 平均マージ
- 3時間 57分
- マージ済み PR(30日)
- 2
説明
System
Version: v3.6.1
Language: Javascript
macOS 10.14
Steps to reproduce
- Create a
srcdirectory 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; } - Compile to js using
mkdir build protoc --proto_path=src --js_out=import_style=commonjs,binary:build id.proto task.proto project.proto npm install google-protobufunder the root directory.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.
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- 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