Laya中使用protobuf生成静态js和dts文件
首先,因为我用的是ts版本创建的项目。所以能和Egret一样使用。
只是配置有所区别。
如何安装:
注意:nodejs版本不能太高,不然生成的dts文件会有报错,比如repeated字段就报错,
所以我们这里node版本用 10 的就好了
npm install protobufjs@6.8.4 -g
npm install @egret/protobuf -g
git地址:https://github.com/WanderWang/protobuf-egret
如何使用
# 假设用户有个名为 project 的项目
cd project
# 将代码和项目结构拷贝至项目中
pb-egret add
# 将 protofile 文件放在 project/protobuf/protofile 文件夹中
pb-egret generate
# 文件将会生成到 protobuf/bundles 文件夹中
由于是Layaair的ts项目,当执行 pb-egret add 的时候,会提示不是Egret的项目。
不要紧,不用理会,它还是会照样生成几个文件夹的。
就是protobuf文件夹。
然后把生成的dts文件放到libs目录下,和layaair.d.ts同一个目录
生成的protobuf-bundles.min.js文件 和protobuf库的js文件 都可以放在laya库相同的目录下
然后一样的加载使用就好
准备工作完成!
接下来我们尝试编写一个awesome.proto文件,然后放到protobuf/protofile目录下,执行命令pb-egret generate。
这样就会生成对应的js和d.ts文件了。
// awesome.proto package awesomepackage; syntax = "proto3"; message AwesomeMessage { string awesome_field = 1; // becomes awesomeField }
我们在代码中调用它,发现有代码提示(ts)。
let ptest = new awesomepackage.AwesomeMessage();
console.log(ptest);
测试解码代码:里面的协议类根据实际生成的协议来改
let d = awesomepackage.AwesomeMessage.create(); d.awesome_field = 'ddd'; console.log("!!!!!!!!!!!",d); //请注意encode是异步的,如果需要即时调用最后一定要加finish()。 var buf = awesomepackage.AwesomeMessage.encode(d).finish(); /开始解析 let proto = awesomepackage.AwesomeMessage.decode(buf); console.log("!!!!!!!!!!! 解析后数据= ",proto); let proto2 = new com.efso.xcd.game.gate.message.DataPackage(); proto2.messageType = 1 console.log("!!!!!!!!!!!====> ",proto2);
调试,输出正常!调用成功!
至于protobufjs的API可以前往官网查阅!