cocos 最简单的protobufjs 接入(3.8已测试)

**安装前说明,及知识点:**
如果你不想全局安装pbjs工具,可以选择将其作为项目的开发依赖安装,并通过npm脚本来执行它。下面是具体步骤  npm install --save-dev protobufjs
安装完成后,你可以直接使用npx命令来执行pbjs,而无需全局安装。npx是npm 5.2+自带的一个命令行工具,它可以帮助你执行项目内的npm包二进制文件。下面是编译.proto文件的命令:
    npx  pbjs -t static-module -w commonjs -o ./assets/awesome.js  ./assets/awesome.proto
    npx pbts -o ./assets/awesome.d.ts  -o ./assets/awesome.js

**要弄清import * as protobuf from 'protobufjs'; 与 import  protobuf from 'protobufjs';  关系有几个要点**

1.ES module 和 CommonJS 是两种不同的模块系统,它们有一些区别如下:
语法:      ES module 使用 import 和 export 关键字来导入和导出模块,而 CommonJS 使用 require 和 module.exports 来导入和导出模块。
动态导入:ES module 支持动态导入,也就是在代码运行时根据需要导入模块。而 CommonJS 不支持动态导入。
作用域:   ES module 的模块作用域是静态的,在模块中定义的变量和函数不会污染全局作用域。而 CommonJS 的模块作用域是动态的,模块中定义的变量和函数会被添加到全局作用域中。
异步加载:ES module 可以异步加载模块,以提高性能和减少启动时间。而 CommonJS 只能同步加载模块。
循环依赖:ES module 可以处理循环依赖,因为它使用静态作用域。而 CommonJS 可能会因为循环依赖导致程序崩溃。
浏览器兼容性:ES module 在现代浏览器中得到广泛支持,但在旧版浏览器中无法使用。而 CommonJS 可以在所有现代浏览器和 Node.js 中使用。
总的来说,ES module 更加现代化和灵活,支持动态导入、异步加载、静态作用域等特性,而 CommonJS 更加简单和适用于早期的 Node.js 环境。在实际开发中,需要根据具体的项目需求和环境来选择使用哪种模块系统。

2.早期的npm包都是commonjs模块,如何查看protobufjs是什么模块: 通常通过包中的package.json文件的"type"字段来指定其默认的模块类型。如果该字段的值为"module",则表示默认为ES模块;如果不指定或为其他值,则默认为CommonJS。
 protobufjs没有moude字段所以是commonjs模块。。也可以查看代码或者官网文档 :All variants support CommonJS and AMD loaders and export globally as window.protobuf.

3.cocos中tsconfig.json配置中    "module": "ES2015", 说明是es模块,无法直接引用protobufjs..直接使用 import * as protobuf from 'protobufjs是可以的,但这时候protobuf不是对象而是moduel。  import  protobuf from 'protobufjs 会报错需要tscongfic.json 添加
{
    "allowSyntheticDefaultImports": true,
}
allowSyntheticDefaultImports是TypeScript编译器中的一个编译选项,它的作用主要是为了提升与老的JavaScript模块系统(如CommonJS)以及一些非标准模块导出方式的兼容性。具体来说,这个设置允许TypeScript按照ES模块的默认导入风格来处理那些没有明确标记为默认导出的模块。

=================重点来了===================================================
**有了上面知识,可以总结成最简单的步骤:如下**
**  1.安装 npm install --save-dev protobufjs**
**  2.生成  npx  pbjs -t static-module -w commonjs -o ./assets/awesome.js  ./assets/awesome.proto**及 pbts -o ./assets/awesome.d.ts  -o ./assets/awesome.js
**  3.引入及使用**
**         import { default as root } from  './awesome.js';  添加了 "allowSyntheticDefaultImports": true 后,**
**          import root from './awesome.js';   **

只有这三步,没有任何其它东西,没有什么修改,没有什么插件脚本。。。不用在网上查这查那找各种资料

=============** 那如果不想用commonjs方式呢** ===========================
**  1.安装 npm install --save-dev protobufjs**
**  2.生成  npx  pbjs -t static-module -w es6 -o ./assets/awesome.js  ./assets/awesome.proto**
    3. 把 awesome.js 改成 awesome.mjs(明确表款es js) 
    4.把import * as $protobuf from "protobufjs/minimal"; 改成 import {default as $protobuf }  from "protobufjs"; (creaor 需要的修改)

虽然可以运行,但是代码无法提示, d.ts文件也用不上
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值