protocolbuffers / protobuf-javascript

BSD 3-Clause "New" or "Revised" License
353 stars 67 forks source link

ReferenceError: proto is not defined #10

Open jzfre opened 2 years ago

jzfre commented 2 years ago

What version of protobuf and what language are you using? Version: Protocol Buffers v3.19.4 Language: Javascript

What operating system (Linux, Windows, ...) and version? Linux Debian 11

What runtime / compiler are you using (e.g., python version or gcc version) Node v12, Node v16

What did you do? Steps to reproduce the behavior:

  1. Install protoc through Debian package system
  2. Install google/protobufer
  3. Define two different correct ".proto" files
  4. Import one file to another with "import" statement
  5. Run protoc with "protoc --proto_path=./ --js_out=import_style=commonjs,binary:./ *.proto"
  6. JS code is generated, for file that is importing

var something_pb = require('./something_pb.js'); goog.object.extend(proto, something_pb);

7: Import generated files as javascript code: require("./proto/hello_pb")

  1. Run the code

What did you expect to see

Everything goes fine

What did you see instead?

goog.object.extend(proto, core_pb); ^ ReferenceError: proto is not defined

ShogoSaito0607 commented 2 years ago

@xrep I face this same issue. As temporary escape for this, I merged three proto files to one file... Of course, I'm very aware this solution is not better essentially :(

Versions
Protocol Buffers v3.19.4
node: v14.15.1
dibenede commented 2 years ago

We don't use commonjs often, so it's unclear what the issue is. We'll need to dig into this a bit to see what's going wrong.

dibenede commented 1 year ago

I'm having trouble reproducing this, so wondering if it's a subtlety of how your projects are structured. My test environment looks like:

project/
- protos/
-- foo.proto
-- foo_pb.js
-- bar.proto
-- bar_pb.js

- tests/
- - test.js

which was generated by running: protoc --plugin=../bin/protoc-gen-js --proto_path=./protos/ --js_out=import_style=commonjs,binary:./protos/ protos/*.proto from under project/

My tests/test.js has the following requires:

const foopb = require('../protos/foo_pb');
const barpb = require('../protos/bar_pb');

@jzfre @ShogoSaito0607 could either of you describe a project layout that's causing trouble for you?

yaobinwen commented 1 year ago

I'm wondering if OP got the error in a React.js app or something else. Today I ran into the same error in my React.js app and I created this repo to reproduce it. @dibenede I'm wondering if this can help you figure out something. See my README for more details (including some other existing work that provides a few workarounds).