protobufjs使用教程,支持proto文件打包成typescript或javascript脚本

news2025/1/4 18:28:05

官方链接:https://docs.cocos.com/creator/manual/zh/scripting/modules/example.html

第一步,安装nodejs。(自行安装)

安装教程可参考 https://www.runoob.com/nodejs/nodejs-install-setup.html

第二步,创建cocos新项目,在新项目根目录(assets同级目录)下打开命令行。

通过 npm 安装 protobufjs 并将它写入项目目录下的 package.json 的依赖项。

在项目目录命令行中执行以下命令:

npm install --save protobufjs

通过 npm 安装 protobufjs--cli 并将它写入项目目录下的 package.json 的依赖项。

npm install --save protobufjs-cli

第三步,在项目目录下新建 Proto 目录并定义几个 proto 文件。

// pkg1.proto

package pkg1;
syntax = "proto2";
message Bar {
    required int32 bar = 1;
}

// pkg2.proto

package pkg2;
syntax = "proto2";
message Baz {
    required int32 baz = 1;
}

// unpkg.proto 不属于任何的包

syntax = "proto2";
message Foo {
    required int32 foo = 1;
}

第四部,增加默认导出。

在项目目录下创建一个 Tools/wrap-pbts-result.js 文件,脚本代码如下:

const fs = require('fs');
  const ps = require('path');
  const file = ps.join(__dirname, '..', 'Protojs', 'proto.d.ts');
  const original = fs.readFileSync(file, { encoding: 'utf8' });
  fs.writeFileSync(file, `
  namespace proto {
      ${original}
  }
  export default proto;
  `);

第五部,在 package.json 中定义。

"scripts": {
    "build-proto:pbjs": "pbjs --dependency protobufjs/minimal.js --target static-module --wrap commonjs --out ./Protojs/proto.js ./Proto/*.proto",
    "build-proto:pbts": "pbts --main --out ./Protojs/proto.d.ts ./Protojs/*.js && node ./Tools/wrap-pbts-result.js"
  }

第六部,在项目目录打开命令行,安装pbjs和pbts。

npm install -g pbjs
npm install -g pbts

第七部,运行package.json中的两个脚本。

"build-proto:pbjs": "pbjs --dependency protobufjs/minimal.js --target static-module --wrap commonjs --out ./Protojs/proto.js ./Proto/*.proto"
"build-proto:pbts": "pbts --main --out ./Protojs/proto.d.ts ./Protojs/*.js && node ./Tools/wrap-pbts-result.js"

即可在Protojs文件夹中生成需要的文件。

将文件导入工程中,即可在工程中引用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1500870.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++11_右值引用与移动语义

目录 1、左值的定义 1.1 左值引用 2、右值的定义 2.1 右值引用 3、右值与左值的使用区别 4、右值引用的意义 4.1 左值引用的短板 5、移动语义 5.1 移动构造 5.2 移动赋值 6、万能引用 6.1 右值的别名-左值化 6.2 完美转发 前言: 在C11之前就有了引…

浏览器一键重新发起请求

一、需求场景 在前端开发过程中,经常会需要重新请求后台进行代码调试,之前的常规方法是刷新浏览器页面或者点击页面进行交互,这样对多个请求的场景就很方便,但是往往很多时候我们只是单纯的想重新发起一个请求(多个请求…

c++ 11 新特性 不同数据类型之间转换函数之const_cast

一.不同数据类型之间转换函数const_cast介绍 const_cast是C11中引入的一种类型转换操作符,用于修改类型的const或volatile属性。const_cast的主要用途是移除对象的常量性,它是唯一具有此能力的C风格的转型操作符。在C11中,const_cast可以完成…

YouTube Premium 会员氪金教程

前言 很多小伙伴喜欢看看YouTube但是有些需要会员才可以查看,会员可以免广告,根据个人需求选择是否需要开通 1、点击个人账号的头像,选择“购买内容和会员” 2、选择个人,点击免费试订,第一个月是免费,如…

智能驾驶规划控制理论学习08-自动驾驶控制模块(轨迹跟踪)

目录 一、基于几何的轨迹跟踪方法 1、基本思想 2、纯追踪 3、Stanly Method 二、PID控制器 三、LQR(Linear Quadratic Regulator) 1、基本思想 2、LQR解法 3、案例学习 基于LQR的路径跟踪 基于LQR的速度跟踪 4、MPC(Mode…

【万题详解】DFS搜索专题合集(上)

专栏推荐 我的专栏——专栏链接 1.文章平均质量分 70分以上 2.以洛谷题为基础,解决C问题 3.有题目、讲解、思路、参考代码…… 4. 文章数:29 (2024.3.8) 课前C小程序(脱控极域电子教室) 这个图标相信…

‘老生常谈’ - 图书管理系统

在软件开发中,增、删、改、查这几个业务非常常见 增 基于axios从服务器拿到需要数据,进行渲染、封装,新增数据并不是一条一条渲染,而是整体重新渲染; 对于该系统新增数据:收集表单数据、提交服务器保存 -…

C++ 实战项目之 Boost 搜索引擎

项目地址:https://gitee.com/Vertas/boost-searcher-project 1. 项目背景 日常生活中我们使用过很多搜索引擎,比如百度,搜狗,360搜索等。我们今天是要实现一个像百度这样的搜索引擎嘛?那是不可能的,因为像…

听 GPT 讲 client-go 源代码 (24)

分享更多精彩内容,欢迎关注! File: client-go/applyconfigurations/batch/v1/jobstatus.go 在client-go的applyconfigurations/batch/v1/jobstatus.go文件中,定义了与Job的状态相关的配置和操作。 文件中定义了以下几个结构体: Jo…

投标中项目组织结构的设置以及调整(样式表,多级列表)

投标中项目组织结构的设置以及调整(样式表,多级列表): 投标项目中需要处理大规模的文字排版,就是需要用到样式表(解决层级关系),多级列表(解决自动编号的问题&#xff0…

WatiN——Web自动化测试(三)【弹出窗口处理】

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

Day25:安全开发-PHP应用文件管理模块包含上传遍历写入删除下载安全

目录 PHP文件操作安全 文件包含 文件删除 文件编辑 文件下载 云产品OSS存储对象去存储文件(泄漏安全) 思维导图 PHP知识点 功能:新闻列表,会员中心,资源下载,留言版,后台模块,模版引用,框…

7个实用的CSS技巧

1. First letter drop 首字母丢失 我们可以使用 :first-letter 来删除文本的第一个字母: p:first-letter {font-size: 200%;color: #8A2BE2; }:first-letter 选择器用于指定元素的首字母样式,它仅适用于块级元素。效果如下: codepen.io/OMGZui/pen/… …

Qt 5.14.2 网络编程揭秘:构建高效HTTP客户端与文件下载器

引言 在当今的软件开发世界中,网络通信已成为不可或缺的一部分。Qt,作为一个跨平台的C框架,为我们提供了强大的网络编程能力。本文将带你深入Qt的网络模块,探索如何使用QNetworkAccessManager、QNetworkRequest和QNetworkReply等核…

读《文明之光》第1册总结

人类几千年的文明史和地球的历史相比,实在是太短暂了,大约相当于几分钟和一年的关系。人类已经走过的路,相比今后要走的漫漫长路,只能算是刚刚起步。如果跳出一个个具体事件,站在历史的高度去看,我们会发现…

找出单身狗1,2

目录 1. 单身狗12. 单身狗2 1. 单身狗1 题目如下: 思路:一部分人可能会使用对数组排序,遍历数组的方式去找出只出现一次的数字,但这种方法的时间复杂度过高,有时候可能会不满足要求。 有一种十分简便的方法是使用异或…

类与对象(三)--static成员、友元

文章目录 1.static成员1.1概念🎧面试题✒️1.2static的特性🎧1.3思考🎧 2.友元2.1什么是友元?🎧2.2两种友元关系:🎧 1.static成员 1.1概念🎧 🔎 static关键字用于声明类…

Python教程,python从入门到精通 第1天 温习笔记

1.1 字面量 1.2 注释 1.3 变量 1.4 数据类型 1.5 数据类型转换 1.6 标识符 1.7 运算符 1.8 字符串的三种定义方式 1.9 字符串拼接 1.10 字符串格式化 1.11 掌握格式化字符串的过程中做数字的精度控制 1.12 掌握快速字符串格式化的方式 1.13 字符串格式化-表达式的格…

动态规划基础模型总结

前言 动态规划是用一个数来表示一堆状态,可以看成是对暴搜的优化 暴搜一个一个数枚举过去,但DP是一堆堆数枚举,效率会快很多; 状态数用几维表示:从小到大考虑,看怎么样才能够让答案清楚表达出来 需要一定的…

下载一些ROS的包的方式

ROS Index 我们可以去ROS Index网站下载一些我们需要的包。打开浏览器在网址框输入index.ros.org。或者点击此处链接ROS Index 在这个网站中我们可以浏览并找到我们需要的包,也可以下载它的源代码或者仅安装到我们的系统中来使用。(安装过程在终端中进行…