Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
P
protobuf
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
protobuf
Commits
5195b7f2
Commit
5195b7f2
authored
Feb 06, 2016
by
Josh Haberman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Greatly expanded README.md.
parent
59ea5000
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
130 additions
and
10 deletions
+130
-10
README.md
js/README.md
+130
-10
No files found.
js/README.md
View file @
5195b7f2
This directory contains Protocol Buffer support for JavaScript. This code works
Protocol Buffers - Google's data interchange format
in browsers and in Node.js.
===================================================
The packaging work for this is still in-progress. For now you can just run the
[
![Build Status
](
https://travis-ci.org/google/protobuf.svg?branch=master
)
](https://travis-ci.org/google/protobuf)
tests. First you need to build the main C++ distribution because the code
generator for JavaScript is written in C++:
$ ./autogen.sh
Copyright 2008 Google Inc.
$ ./configure
$ make
Th
en you can run the JavaScript tests in this directory:
Th
is directory contains the JavaScript Protocol Buffers runtime library.
$ cd js && gulp test
The library is currently compatible with:
1.
CommonJS-style imports (eg.
`var protos = require('my-protos');`
)
2.
Closure-style imports (eg.
`goog.require('my.package.MyProto');`
)
Support for ES6-style imports is not implemented yet. Browsers can
be supported by using Browserify, webpack, Closure Compiler, etc. to
resolve imports at compile time.
To use Protocol Buffers with JavaScript, you need two main components:
1.
The protobuf runtime library. You can install this with
`npm install google-protobuf`
, or use the files in this directory.
2.
The Protocol Compiler
`protoc`
. This translates
`.proto`
files
into
`.js`
files. The compiler is not currently available via
npm -- you must download and compile it from GitHub or a tarball.
Setup
=====
First, compile the Protocol Compiler.
You can compile
`protoc`
from GitHub or a source tarball. From the
top level directory type:
$ ./autogen.sh (only necessary for GitHub)
$ ./configure
$ make
Once you have
`protoc`
compiled, you can run the tests by typing:
$ npm install
$ npm test
This will run two separate copies of the tests: one that uses
Closure Compiler style imports and one that uses CommonJS imports.
You can see all the CommonJS files in
`commonjs_out/`
.
If all of these tests pass, you know you have a working setup.
Using Protocol Buffers in your own project
==========================================
To use Protocol Buffers in your own project, you need to integrate
the Protocol Compiler into your build system. The details are a
little different depending on whether you are using Closure imports
or CommonJS imports:
Closure Imports
---------------
If you want to use Closure imports, your build should run a command
like this:
$ protoc --js_out=library=myproto_libs,binary:. messages.proto base.proto
For Closure imports,
`protoc`
will generate a single output file
(
`myproto_libs.js`
in this example). The generated file will
`goog.provide()`
all of the types defined in your .proto files. For example, for the unit
tests the generated files contain many
`goog.provide`
statements like:
goog.provide('proto.google.protobuf.DescriptorProto');
goog.provide('proto.google.protobuf.DescriptorProto.ExtensionRange');
goog.provide('proto.google.protobuf.DescriptorProto.ReservedRange');
goog.provide('proto.google.protobuf.EnumDescriptorProto');
goog.provide('proto.google.protobuf.EnumOptions');
The generated code will also
`goog.require()`
many types in the core library,
and they will require many types in the Google Closure library. So make sure
that your
`goog.provide()`
/
`goog.require()`
setup can find all of your
generated code, the core library
`.js`
files in this directory, and the
Google Closure library itself.
Once you've done this, you should be able to import your types with
statements like:
goog.require('proto.my.package.MyMessage');
var message = proto.my.package.MyMessage();
CommonJS imports
----------------
If you want to use CommonJS imports, your build should run a command
like this:
$ protoc --js_out=import_style=commonjs,binary:. messages.proto base.proto
For CommonJS imports,
`protoc`
will spit out one file per input file
(so
`messages_pb.js`
and
`base_pb.js`
in this example). The generated
code will depend on the core runtime, which should be in a file called
`google-protobuf.js`
. If you are installing from
`npm`
, this file should
already be built and available. If you are running from GitHub, you need
to build it first by running:
$ gulp dist
Once you've done this, you should be able to import your types with
statements like:
var messages = require('./messages_pb');
var message = new messages.MyMessage();
API
===
The API is not well-documented yet. Here is a quick example to give you an
idea of how the library generally works:
var message = new MyMessage();
message.setName("John Doe");
message.setAge(25);
message.setPhoneNumbers(["800-555-1212", "800-555-0000"]);
// Serializes to a UInt8Array.
bytes = message.serializeBinary();
var message2 = new MyMessage();
message2.deserializeBinary(bytes);
For more examples, see the tests. You can also look at the generated code
to see what methods are defined for your generated messages.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment