其他分享
首页 > 其他分享> > 打破CocosCreator3d不能使用npm包的魔咒!!!

打破CocosCreator3d不能使用npm包的魔咒!!!

作者:互联网

打破CocosCreator3d不能使用npm包的魔咒!!!

背景

CocosCreator3d模块机制

这个时候就得祭出调试的杀手级工具:Chrome Devtools

调试运行CocosCreator3d空项目

查看index.html

index.html

CocosCreator3d中使用了system.js,并且在index.html注册了一个叫 code-quality:cr的模块

而且加载了一个.import-map.json的东西

搜索.import-map.json看看是什么

.import-map.json

通过以上的调试我们大概知道,CocosCreator3d使用了一个叫systemjs的库,然后呢,用来注册一些模块。这个systemjs可能是关键的东西,得了解一下。

SystemJS的官方github:https://github.com/systemjs/systemjs

别人的使用:SystemJS使用记录

了解过后,我们能知道它就是一个模块加载器,以及它的注册方式

  1. 通过一个map注册一堆模块
  2. 通过register接口注册一个模块

但是怎么处理引用的呢?

断点调试systemjs

找到systemjs,搜索register

image

搜索importMap之类的关键词

image

通过以上调试验证了我们的猜想:SystemJs,用来注册和加载模块的,是一种模块规范,需要做特殊处理才能注册进去和使用。但我们需要来写一个简单的systemjs规范的模块来验证一下。

手写一个简单的SystemJs的模块

这个很简单的,大家都可以新建一个空C3d项目尝试一下。

经过验证尝试,我们知道,只要将npm包转成systemjs规范的文件就可以被我们的代码引用,以及正常使用了。但手写太麻烦了,有什么简单的办法呢?

如何快速地转换npm包为systemjs规范库

使用egf-cli

这个工具是我为EasyGameFramework打造的,目的是可以发布框架库为任意规范模块,给不同的引擎和项目使用。

有兴趣可以看看我之前写的文章

以及框架仓库:https://github.com/AILHC/EasyGameClientFramework.git

使用这个工具对npm包有一定的要求

  1. 符合commonjs规范
  2. 最好有类型声明文件
  3. 最好能是typescript开发的

我以xstate(一个高star的状态机库)为例子

其他方式

  1. 如果npm包有构建systemjs,直接使用
  2. 如果没有构建systemjs,看是否有typescript源码,copy源码,使用egf-cli构建一个systemjs规范的js
  3. 如果是全局变量的库,直接设置为插件就可以了。

CocosCreator3.0?

它也许会支持npm包,但等待它的到来可能还有一段时间

而且研究一下CocosCreator3d的模块加载机制说不定,在遇到看不懂的问题时有所头绪呢。

谢谢大家阅读我的文章,希望大家能有所收获。

框架开发系列文章

最后

欢迎关注我的公众号,更多内容持续更新

公众号搜索:玩转游戏开发

或扫码:img

QQ 群: 1103157878

博客主页: https://ailhc.github.io/

掘金: https://juejin.cn/user/3069492195769469

github: https://github.com/AILHC

标签:npm,CocosCreator3d,SimpleSysJs,魔咒,模块,使用,systemjs
来源: https://blog.csdn.net/ailhc/article/details/111403087