分享一下protobufjs动态加载proto

protobufjs 使用的是5.0.3的版本,之所以使用这个版本是因为微信和QQ小游戏屏蔽了Function 动态执行代码,所以为了兼容所有平台使用的5.0.3.
cocos creator 3.x 的使用
1.先去网站下https://github.com/protobufjs/protobuf.js/tree/ProtoBuf5 包,因为我用npm 安装指定版本安装不上,所有就直接去下的模块包,我下载的是压缩包,解压出来后把文件夹的名称改为protobufjs,移动到项目的node_modules文件夹下就可以了.
2.安装nodejs bytebuffer包,在项目目录下命令行执行 npm install bytebuffer
3.将node_modules文件下bytebuffer包里的package.json的"main": “dist/bytebuffer-node.js"改为"dist/bytebuffer.js”
4.需要重启一下项目,不知道为啥修改main对应值没有立即生效,感觉有可能是缓存导致的.
如何在项目中使用在测试项目里protobufjs-5.0-3.x.rar (1.0 MB)
cocos creator 2.4的使用
1.先去网站下https://github.com/protobufjs/protobuf.js/tree/ProtoBuf5 包,因为我用npm 安装指定版本安装不上,所有就直接去下的模块包,我下载的是压缩包,解压出来后把文件夹的名称改为protobufjs,移动到项目的node_modules文件夹下就可以了.
2.安装nodejs bytebuffer包,在项目目录下命令行执行 npm install bytebuffer
3.找到protobuf.js 路径为 你的项目/node_modules/protobufjs/dist/protobuf 拷贝到你的项目assets目录下
4.找到bytebuffer.js 路径为 你的项目/node_modules/bytebuffer/dist/bytebuffer拷贝到你的项目assets目录下
5.找到long.js 路径为 你的项目/node_modules/long/dist/long 拷贝到你的项目assets目录下
6.修改protobuf.js文件 将$ISHGXDE5(_O{b__MG}P require(“bytebuffer”) 改为require("./bytebuffer"); 其实就是改为相对于protobuf.js文件的路径.
7.修改bytebuffer.js文件 将~2LP0G%0{D4F(GTDY}SP require(“long”) 改为require("./long"); 其实就是改为相对于bytebuffer.js文件的路径.
8.注意不要做为插件导入.
如何在项目中使用在测试项目里protobufjs-5.0-2.4.rar (251.0 KB)

对于proto的动态加载要先加载所有的proto的资源以后才能使用

动态解析挺好就是没有proto对应消息的属性代码提示·所有我自己写了一个插件可以将proto的消息导出为ts接口,插件是3.8.1写的,得在插件根目录下执行一下命令行 npm install 安装一下依赖包
插件在这里proto-export-ts-interface.rar (165.1 KB)

5赞

好诶~~~

能请教下 服务器返回的消息解析回来的 int64的类型 都变成了 {“low”:0,“high”:0,“unsigned”:false} 对象类型了 这个有遇到过吗

用的是 你的 5.0-3.x的包 我直接把你包里的东西拷贝到项目里了

如果你的数字最大数不超过2*53次方的话可以直接改一下protobuf.js文件,找到cloneRaw函数image ProtoBuf.Long.fromValue(obj) 直接改为
obj.toNumber(),这样就直接转为一个js中number了·不是Long了,你试下可以不呢,文件位置在node_modules\protobufjs\dist\protobuf.js 记得改了重启下编辑器·不然没生效还是用的缓存的.

我是直接把util.Long=null

这里写最大值2的1024次方-1,看了你说的53次方,才去查了能准确表达的整数范围居然只有53次方

这个后面项目停滞了,就没去用了,后面有用到我再测试下

mark!!!