Hi Michael

I've been wondering exact same question recently, the way I found it was to:

`yarn add google-protobuf`

I know you're not using Node but just use yarn (or npm i google-protobuf) 
to add the node_modules folder. You need `yarn init` or `npm init -y` first 
to make sure there's package.json otherwise the dependency won't save.

This will add the package to your node_modules

Then inside the package you'll have the google-protobuf.js file.

Hope this helps.

But the file is massive, 230KB! Because it's the full unoptimised runtime. 
What I've been working lately is generating a static JS file from a proto 
and then compiling it with Closure Compiler. That's the right way to do it, 
using a test file from the protobuf js project I got:

goog.require(/*depack*/ 'proto.jspb.test.Simple1');


var message = new proto.jspb.test.Simple1();
message.setARepeatedStringList(['hello'])
message.setAString('world')
const binary = message.serializeBinary()

This simple interface was compiled into 


/*


 Copyright The Closure Library Authors.
 SPDX-License-Identifier: Apache-2.0
*/
function f(b,a){function c(){}c.prototype=a.prototype;b.prototype=new c;b.
prototype.constructor=b};function g(){this.a=[]}g.prototype.length=function
(){return this.a.length};function k(b){var a=b.a;b.a=[];return a};function l
(b,a,c){b=b.a;for(a=8*a+c;127<a;)b.a.push(a&127|128),a>>>=7;b.a.push(a)}
function n(b,a){var c=p;if(null!=a){l(c,b,2);b=k(c.a);c.c.push(b);c.b+=b.
length;b.push(c.b);for(var e=c.a,h=0;h<a.length;h++){var d=a.charCodeAt(h);
if(128>d)e.a.push(d);else if(2048>d)e.a.push(d>>6|192),e.a.push(d&63|128);
else if(65536>d)if(55296<=d&&56319>=d&&h+1<a.length){var m=a.charCodeAt(h+1
);56320<=m&&57343>=m&&(d=1024*(d-55296)+m-56320+65536,e.a.push(d>>18|240),e.
a.push(d>>12&63|128),e.a.push(d>>6&63|128),e.a.push(d&63|128),h++)}else e.a.
push(d>>12|224),e.a.push(d>>6&63|128),e.a.push(d&63|
128)}a=b.pop();for(a=c.b+c.a.length()-a;127<a;)b.push(a&127|128),a>>>=7,c.b
++;b.push(a);c.b++}};function q(){}var r="function"==typeof Uint8Array,t=
Object.freeze?Object.freeze([]):[];function u(b){var a=b.c+b.f;b.a[a]||(b.b=
b.a[a]={})}function v(b){var a=w;if(b<a.c){b+=a.f;var c=a.a[b];return c===t?
a.a[b]=[]:c}if(a.b)return c=a.b[b],c===t?a.b[b]=[]:c}function x(b,a){var c=w
;b<c.c?c.a[b+c.f]=a:(u(c),c.b[b]=a)}q.prototype.toString=function(){return 
this.a.toString()};function y(b){var a=b;b=z;a||(a=[]);this.f=-1;this.a=a;a
:{if(a=this.a.length){--a;var c=this.a[a];if(!(null===c||"object"!=typeof c
||Array.isArray(c)||r&&c instanceof Uint8Array)){this.c=a- -1;this.b=c;break 
a}}this.c=Number.MAX_VALUE}if(b)for(a=0;a<b.length;a++)c=b[a],c<this.c?(c+=-
1,this.a[c]=this.a[c]||t):(u(this),this.b[c]=this.b[c]||t)}f(y,q);var z=[2];
var w=new y;x(2,["hello"]);x(1,"world");var p=new function(){this.c=[];this.
b=0;this.a=new g},A;A=v(1);null!=A&&n(1,A);A=v(2);if(0<A.length){var B=A;if(
null!=B)for(var C=0;C<B.length;C++)n(2,B[C])}A=v(3);if(null!=A){var D=A;null
!=D&&(l(p,3,0),p.a.a.push(D?1:0))}for(var E=new Uint8Array(p.b+p.a.length
()),F=p.c,G=F.length,H=0,I=0;I<G;I++){var J=F[I];E.set(J,H);H+=J.length}var 
K=k(p.a);E.set(K,H);p.c=[E];console.log(E);



With advanced optimisations, which is just 2.1KB. 

My assumption is that you wouldn't want 230KB runtime so the compilation 
strategy is what you're after... So I'll be preparing a guide on how to do 
that for my website, you can add me on keybase so I'll post it to you, or 
I'll submit to the newsletter too. 

There's also https://www.npmjs.com/package/protobufjs library which allows 
to generate static js code too and their runtime is 20kb. It's also 7 times 
faster than google's but I don't like it because I can't compile their code 
and it installs hell of a lot of dependencies. They cheat npm dependency 
count as they have only < 10 specified in package.json, but once you start 
compiling protos it will pull uglify etc so you'll end up with hundreds of 
deps. Speed is not a factor for me I'm just looking into RPC API 
implementation instead of rest, and protobufs also provide message hiding 
so that people can't inspect network requests.

Best regards, 
Ned. 


On Thursday, July 9, 2020 at 9:45:41 PM UTC+3, Michael Lum wrote:
>
> Hi, I've searched for quite a while but I cannot find the file: 
> *google-protobuf.js*.
>
> I followed this link:  
> https://github.com/protocolbuffers/protobuf/tree/master/js
>
> I'm using the *CommonJS imports *instructions.
>
> I built my protobuf files using a docker image that contains the 
> Javascript plugin this way:
>
> docker run --rm --user "$(id -u):$(id -g)" -v $(pwd):$(pwd) -w $(pwd) 
> gwihlidal/protoc --js_out=import_style=commonjs,binary:. -I. ./myproto.proto
>
> This produced:  myproto_pb.js
>
> Now the link above says I need google-protobuf.js but that file does not 
> exist.
>
> I am not using Node nor gulp, so 'gulp dist' does not work.
>
> I've tried looking at multiple threads here but none indicate where this 
> file is.
> I've downloaded protobuf-js-3.12.3.zip but it's not in there.
>
> I want to generate protobuf messages in  a browser not from Node.
>
> Thanks for any help
>
>
>
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to protobuf+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/protobuf/47893fbb-4bf8-4c4f-8716-7c2edff140c3o%40googlegroups.com.

Reply via email to