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可以前往官网查阅!

暂无评论

发布评论

分享:

支付宝

微信