[muzzik 插件]:protobufjs 自动化(从安装到使用)

你是否遇到了 protobufjs 安装的问题?或者每次更新 pb 都要去手动执行?来看看这个插件吧!

由于论坛 markdown 展示效果不佳,可跳转至此链接查看

:loudspeaker: 功能介绍

  • :hammer: 构建:只编译变更的 proto 文件,让构建更快

  • :headphones: 监听构建:当 proto 文件变更时,自动构建

  • :briefcase: pb 包装:可以将单个目录下的多个 package 包装到一个对象内

  • :hamburger: 自定义构建参数:满足你裁剪代码缩小代码体积的需求!

  • :hamburger: 自定义构建:构建代码全可自定义,还怕不能适配你现在的项目?

为了支持任意方式的热更,直接将 proto 编译为 ts 和 d.ts 脚本

手动构建

:circus_tent: 商店传送门

https://store.cocos.com/app/detail/5243

:pushpin: 目录

:green_book: 使用说明

:blush: 已经安装 protobufjs

在你安装完插件后,项目根目录会出现一个 .protobufjs.js 文件,这是插件的配置文件,不能移动位置,插件每次启动都会检测此文件是否存在,不存在则会新建一个

配置里面有什么,让我看看!:eyes:


module.exports = {

  /**

   * 协议列表

   * @type {proto_list[]}

   */

  proto_list: [],

  /**

    自动构建开关

    - true: 递归监听 dir_path_ss 内的文件添加/删除/修改,并触发构建指令

    - false:需要手动点击 `protobuf/构建` 才会触发构建菜单

  */

  automatic_build_b: true,

  /** 自动构建延迟(秒),防止短时间内频繁触发构建 */

  automatic_build_delay_s_n: 2,

  /**

   * 构建函数

   * @param {proto_list} config_ proto 配置

   * @returns 成功状态

   */

  async build_f(config_) {

    // ...

  },

};

参数讲解

  • proto_list:proto 生成配置列表

    详情(点击展开)
    
    /**
    
     * @typedef {Object} proto_list
    
     * @property {string | undefined} namespace_s 命名空间
    
     * @property {string[]} proto_ss 协议文件(生成为脚本的协议文件)
    
     * @property {string} ts_output_path_s ts 输出路径(带脚本名)
    
     * @property {string} dts_output_path_s d.ts 输出路径(带脚本名)
    
     * @property {string[] | undefined} pbjs_parameters pbjs 生成时参数(可用于裁剪代码, 命令行`npx pbjs`查看具体参数)
    
     */
    
    
    • namespace_s:包装后的对象名

      示例(点击展开)

      如果 a.protob.proto 中的 package 分别为 a、b

      • 设置 namespace_s 为 pb 后

        
        import { pb } from "./proto/test";
        
        pb.a;
        
        pb.b;
        
        
      • 不设置 namespace_s

        
        import { a, b } from "./proto/test";
        
        
    • proto_ss:协议文件路径(支持相对/绝对路径)

      示例(点击展开)
      • “./a/*.proto”

        代表 当前目录/a 文件夹下的所有 proto 文件,不包含子文件夹

      • “./a/**/*.proto”

        代表 当前目录/a 文件夹下的所有 proto 文件,包含子文件夹

      • “./a/a.proto”

      代表 当前目录/a/a.proto 单文件

    • ts_output_path_s:输出的协议 ts 文件

    • dts_output_path_s:输出的协议 d.ts 文件(所在目录必须和 ts 文件相同)

    • pbjs_parameters:生成时参数

      控制台执行 npx pbjs 就可以看到有哪些参数了

  • automatic_build_b:自动构建开关

  • automatic_build_delay_s_n:自动构建延迟(秒)

    监听到 proto 文件修改后,延迟多久开始构建

  • build_f:构建函数,你可以在这里修改构建逻辑,方便适配多个项目

:flushed: 未安装 protobufjs

  • 如果你想通过 bundle 方式热更,点击 protobufjs/安装/导入文件方式

  • 如果你想通过 apk 更新或者 manifest 热更,点击 protobufjs/安装/NPM 方式

注:个人推荐尽可能使用 NPM 方式,因为导入文件方式是直接导入 protobufjs 库的 ts 文件,有可能存在加载顺序问题

在安装完成后,点击跳转阅读 已经安装 protobufjs 章节

mark一下

更新公告 1.0.1

  • 通过自定义构建流程添加对消息头以及消息 id 的生成

晚点补上效果图

消息头

例如给所有消息名以 _C _S 结尾的消息添加消息序列号,使用正则匹配,可自定义


消息 id

消息 id 直接生成默认值,让你使用 proto 再也不用关注消息号,消息号生成逻辑也可以自定义

使用默认值消息 id 有什么好处?看这个帖子就知道了


消息头/id 生成逻辑为 ts 文件,可以自定义插入服务器协议文件生成逻辑

不用担心非 Nodejs 服务器重复写 消息头/id 生成逻辑

卧槽 那个点击展开骚到我了

:rocket: 使用消息头和消息 id 生成适配任何项目

proto 文件

image

消息头配置

如图所示匹配后缀为 _c 的 message 添加消息头

image

消息 id 配置

如图所示匹配后缀为 _c 的 message 添加消息 id

image

生成结果

image

解码结果

消息 id 序号 1,然后接着消息头数组,严格顺序

更新公告 1.0.2

  • 修复默认配置文件 .protobufjs 错误

这个工具的附加功能咋样?
go-xlsx-exporter/doc/message.md at main · wingcd/go-xlsx-exporter (github.com)

就问你一个问题,你把项目拿给没用过这个工具的人他能进行二次开发吗?

用非行业广泛使用的工具,前一个开发人员一跑路后面的直接傻眼

大佬流啤 :cow: :beer:

生成的就是proto文件,为啥不是行业广泛使用的?只能说明你看都没看过!

1,我只看了简介,简历里说的是protobuf结构体,谁知道你说的结构体是什么?

2,你的主体是xml,那么为什么不直接用proto文件呢?有什么好处,简介里面说了吗?

3,如果你的主体是xml,那么如果没有这个xml后续能进行二次生成或者能直接用之前的proto二次修改?这就是我说的意思

更新公告 1.0.3

  • 修复两种安装方式的差异适配

  • 修复 tsconfig 内属性缺失导致的 protobufjs 引用失败