首页 文章 LAYA的js/ts使用protobuff
https://www.npmjs.com/package/pbjs
首先需要安装nodejs,会自动安装npm
然后安装pbjs
npm install -g pbjs
然后将proto转为js,可以选择使用--es5/--es6
pbjs wire-format.proto --es5 wire-format.js
如果是ts,需要可以转为d.ts
pbjs wire-format.proto --ts wire-format.ts
补充:
使用中发现ts导出并没有将proto中定义的package封装导出到生成的ts代码中,导致使用时需要所有导出的成员访问都必须进行import,比如:
import { C2S_GamerLogin, encodeC2S_GamerLogin, decodeC2S_GamerLogin, MSG, encodeMSG } from "../pb/msg";
当然也可以使用
import * as pb from "../pb/msg";
但是总是觉得不怎么科学,还是想在生成的ts文件中加上package封装成module
查看pbjs源码,只需要在源码的$USERPATH/AppData/Roaming/npm/npm/node_modules/pbjs/generate.js中稍作修改即可
const lines = []; lines是要生成的文件内容,最先加入module定义:
if (typescript) { lines.push("export module "+ schema.package +" {") }
然后再最后再插入一个
if (typescript) { lines.push("}") }
这样生成的ts代码用的时候可以只要import一次package,比如pb
import {pb} from "../pb/msg"; pb.encodeC2S_GamerLogin