要想实现真正的动态加载或者说按需加载,Creator 必须要知道你会动态加载哪些模块?因为它需要把所有有可能加载的模块都编译好。大家可能会说,那不就是项目里 assets/ 下面的所有模块吗?并不。Creator 支持非 assets/ 下的模块,例如,npm 里的模块,例如项目根目录下 libs-xxxxxxx/ 下面的模块。这些 Creator 无从知晓。
即使我们知道了哪些模块会被加载,比如我们破釜沉舟,扫描项目下的所有
.ts
和
.js
把它们都视为有可能加载的模块。我们还需要解决另一个问题——场景加载时候,哪些模块是需要的?例如,你一个模块里写了一个组件,这个组件在你第一个场景里用到了,那么 Creator 必须要在加载你这个场景之前加载好模块。场景和模块之间的关系是没有关联的,目前。
因此,现在 Creator 的做法就是,一股脑把所有模块都加载了。
能否换一种角度看这个需求,就是希望能
以类名来导入某个类所在的模块,而不用知道它所在模块的路径
?如果可以,我建议是用
导入映射 · Cocos Creator
来实现。
假设有两个类
A
和
B
,它们分别在
assets/a.ts
和
assets/b.ts
下面,并且作为
默认导出
。那可以创建一个导入映射,放在项目根目录,名为
import-map.json
,内容如下:
"imports": {
"A": "./assets/a.ts",
"B": "./assets/b.ts"
然后按照文档中的步骤,把它设置到项目设置中。
然后就这样使用:
import A from 'A'; // 类 A
import B from 'B'; // 类 B