转译protobuf文件为js文件
npm install --save-dev protobufjs-webpack-pluginAdd it to your webpack.config.js
var ProtobufPlugin = require('protobufjs-webpack-plugin'); module.exports = { plugins: [ new ProtobufPlugin({ input: path.join('proto', '*.proto'), output: path.join('dist', 'proto') }) ] };{ input: '', // 输入文件匹配 output: '', // 输出路径, 如果是文件夹,单文件输出则以 basic.proto.js命名,多文件以文件名拼接 outputType: 1, // 输入方式,默认多文件形式, 如果设置为 0,则所有合并为单文件 target: 'static-module', // 类型 json|json-module|static\static-module format: 'es6', // 输出格式: es6|commonjs|amd|closure create: true, // 是否需要 create方法 encode: true, // 是否需要 encode 方法 decode: true, // 是否需要 decode 方法 verify: true, // 是否需要 verify 方法 delimited: true, // 是否需要 delimited 方法 beautify: true, // 是否需要美化代码 comments: true, // 是否需要代码注释文档 convert: true // 是否需要 from/toObject }demo.proto
package base; syntax = "proto3"; message base { string base = 1; }compile to base.js
In your js
var axios = require('axios'); var base = require('base.js'); // decode data function fetchDecode(proto, data) { return proto.decode(new Uint8Array(data)); } // encode data function fetchEncode(proto, data) { return proto.encode(proto.create(data)).finish(); } let buffer = fetchEncode(base.base, {'base': '1'}); axios.post('http://localhost:8080/protobuf', buffer, { responseType: 'arraybuffer', headers: { 'Content-type': 'application/octet-stream' } }) .then(res => { let data = fetchDecode(base.base, res); console.log(data); });