/grpc-loader

gRPC loader for webpack. Compiles Proto files to JS.

Primary LanguageJavaScriptMIT LicenseMIT

gRPC loader module for webpack

Converts .proto files into autogenerated js files for use with gRPC

Installation

yarn add --dev grpc-loader

Usage

static: true You can ignore protobufjs peer dependency if you use this option. P.S. I don't really like this api. It's too verbose. google-protobuf

const proto = require('./test.proto');
console.log(proto);

// {
//   services: {
//     GreeterService: {
//       sayHello: [Object]
//     },
//     GreeterClient: {
//       [Function: ServiceClient] super_: [Function: Client],
//       service: [Object]
//     }
//   },
//   messages: {
//     HelloReply: {
//       [Function]
//       superClass_: [Object],
//       base: [Function],
//       toObject: [Function],
//       deserializeBinary: [Function],
//       deserializeBinaryFromReader: [Function],
//       serializeBinaryToWriter: [Function]
//     },
//     HelloRequest: {
//       [Function]
//       superClass_: [Object],
//       base: [Function],
//       toObject: [Function],
//       deserializeBinary: [Function],
//       deserializeBinaryFromReader: [Function],
//       serializeBinaryToWriter: [Function]
//     }
//   }
// }

static: false You can ignore google-protobuf peer dependency if you use this option. same as grpc.load you can also pass any properties that grpc.load accepts

const proto = require('./test.proto');
console.log(proto);

// {
//   helloworld: {
//     Greeter: {
//       [
//         Function: ServiceClient
//       ]super_: [
//         Function: Client
//       ],
//       service: [
//         Object
//       ]
//     },
//     HelloRequest: {
//       
//     },
//     HelloReply: {
//       
//     }
//   }
// }

For usage checkout test folder

Test

npm run test

webpack config

module.exports = {
  module: {
    rules: [
      {
        test: /\.proto$/,
        loader: 'grpc-loader',
        options: {
          // both methods are static internally
          // but result api differs
          // https://github.com/grpc/grpc/tree/master/examples/node
          static: false,

          // grpc props
          // https://github.com/grpc/grpc-node/blob/master/packages/grpc-protobufjs/index.js#L37-L42
          //  convertFieldsToCamelCase,
          //  binaryAsBase64,
          //  longsAsStrings,
          //  enumsAsStrings,
        },
      }
    ]
  }
};

License

MIT (http://www.opensource.org/licenses/mit-license.php)