安裝
sudo npm install -g [email protected]
pbjs -v
(不行的話:npm install [email protected]再試一試)
輸出版本信息 protobuf.js v6.7.0 CLI for JavaScript和相關命令
pbts -v
定位到.proto文件目錄
單個.proto文件轉js
pbjs -t static-module -w commonjs -o ChatMsg.js ChatMsg.proto
多個.proto文件轉js
pbjs -t static-module -w commonjs -o CMsg_pb.js *.proto
將轉的js轉ts(js文件超大,ts卻很小)
pbts -o CMsg_pb.d.ts CMsg_pb.js
導出的js文件超大,可以考慮去掉不用的函數。後面加入命令 --no-convert或者 --no-delimited
pbjs -t static-module -w commonjs -o ChatMsg.js ChatMsg.proto --no-convert
少了部分函數,文件會小很多,當然要確定不需要這些函數。
將導出的js和ts文件放到工程腳本文件夾下;
同時將/usr/local/lib/node_modules/protobufjs/dist/protobuf.js文件放到creator腳本文件下,導入爲插件,
因爲插件模式導入,可以直接使用,所以講導出的js文件開頭修改:
將文件開頭
var $protobuf = require("protobufjs/minimal");
改爲
var $protobuf = protobuf;
在使用的腳本文件中引用(ts工程),路徑根據實際情況去設置
import { grace } from "./ChatMsg";
let tChatMsg: grace.proto.msg.ChatMsg = new grace.proto.msg.ChatMsg();
let tPlayer: grace.proto.msg.Player = new grace.proto.msg.Player();
console.log(tChatMsg);
console.log(tPlayer);
tPlayer.id = 123;
tPlayer.name = 'lisi';
tPlayer.enterTime = 12345;
console.log(tPlayer);
let tPlayerData = PbUtil.Encode('msg','Player', tPlayer);
console.log("---Player---");
console.log(tPlayerData);
PbUtil文件
import { grace } from "./ChatMsg";
export default class PbUtil {
//packageName: package名
//msgTypeName: 消息類型名
static Encode(packageName, msgTypeName, data): any {
let PackageMgr = grace.proto;
var msgType = PackageMgr[packageName][msgTypeName];
var msg = msgType.create(data);
var bytes = msgType.encode(msg).finish();
return bytes;
}
static Decode(packageName, msgTypeName, bytes): any {
let PackageMgr = grace.proto;
var msgType = PackageMgr[packageName][msgTypeName];
var msg = msgType.decode(bytes);
var data = msgType.toObject(msg, {
longs: Number, //long默認轉換爲Number類型
enums: String,
bytes: String,
// see ConversionOptions
});
return data;
}
}