Movatterモバイル変換


[0]ホーム

URL:


Google Git
Sign in
chromium /external /github.com /protocolbuffers /protobuf-javascript
Clone this repo:

Branches

Tags

  1. f418f58Bump protoc version to 31.1by Stephanie DiBenedetto· 5 weeks agomain
  2. 28bf5dfBump protobuf version to 31.0by Stephanie DiBenedetto· 10 weeks ago
  3. 0768cc9Fix path for rules_pkg providers.bzl loadby Stephanie DiBenedetto· 4 months ago
  4. 9224d3eUpdate scorecard.ymlby Stephanie DiBenedetto· 4 months ago
  5. 5f41caeMerge pull request #229 from dibenede/update-protobufby Luke Sandberg· 4 months ago

Protocol Buffers - Google's data interchange format

Copyright 2008 Google Inc.

This directory contains the JavaScript Protocol Buffers runtime library.

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 withnpm install google-protobuf, or use the files in this directory. If npm is not being used, as of 3.3.0, the files needed are located in binary subdirectory; arith.js, constants.js, decoder.js, encoder.js, map.js, message.js, reader.js, utils.js, writer.js
  2. The Protocol Compilerprotoc. This translates.proto files into.js files. The compiler is not currently available via npm, but you can download a pre-built binaryon GitHub (look for theprotoc-*.zip files underDownloads).

Project Status

This project is currently in a working state.

Support Status

We currently do not have staffing for more than minimal support for this open source project. We will answer questions and triage any issues.

Contributing

Contributions should preserve existing behavior where possible. Current customers rely on applications continuing to work across minor version upgrades. We encourage small targeted contributions. Thanks!

Setup

First, obtain the Protocol Compiler. The easiest way is to download a pre-built binary fromhttps://github.com/protocolbuffers/protobuf/releases.

If you want, you can compileprotoc from source instead. To do this follow the instructions inthe top-level README.

Once you haveprotoc compiled, you can run the tests provided along with our project to examine whether it can run successfully. In order to do this, you should download the Protocol Buffer source code from the release page with the link above. Then extract the source code and navigate to the folder namedjs containing apackage.json file and a series of test files. In this folder, you can run the commands below to run the tests automatically.

$ npm install$ PROTOC_INC=/usr/include/google/protobuf npm test

PROTOC_INC specifies the protobuf include path. By default, we useprotoc located fromPATH. Optionally, you can use thePROTOC enviroment variable to specify an alternativeprotoc.

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 incommonjs_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 willgoog.provide() all of the types defined in your .proto files. For example, for the unit tests the generated files contain manygoog.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 alsogoog.require() many types in the core library, and they will require many types in the Google Closure library. So make sure that yourgoog.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();

If unfamiliar with Closure or its compiler, consider reviewingClosure documentation.

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 (somessages_pb.js andbase_pb.js in this example). The generated code will depend on the core runtime, which should be in a file calledgoogle-protobuf.js. If you are installing fromnpm, 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();

The--js_out flag

The syntax of the--js_out flag is:

--js_out=[OPTIONS:]output_dir

WhereOPTIONS are separated by commas. Options are eitheropt=val or justopt (for options that don't take a value). The available options are specified and documented in theGeneratorOptions struct ingenerator/js_generator.h.

Some examples:

  • --js_out=library=myprotos_lib.js,binary:.: this contains the optionslibrary=myprotos.lib.js andbinary and outputs to the current directory. Theimport_style option is left to the default, which isclosure.
  • --js_out=import_style=commonjs,binary:protos: this contains the optionsimport_style=commonjs andbinary and outputs to the directoryprotos.import_style=commonjs_strict doesn't expose the output on the global scope.

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=newMyMessage();message.setName("John Doe");message.setAge(25);message.setPhoneNumbers(["800-555-1212","800-555-0000"]);// Serializes to a UInt8Array.var bytes= message.serializeBinary();var message2=MyMessage.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.


[8]ページ先頭

©2009-2025 Movatter.jp