目前动态导入表达式 import(expr) 中的 expr 只能为字符串噢。
实际上即时你写了 import('../../test'),../../test 也会在游戏运行时一股脑加载进去。
原因
要想实现真正的动态加载或者说按需加载,Creator 必须要知道你会动态加载哪些模块?因为它需要把所有有可能加载的模块都编译好。大家可能会说,那不就是项目里 assets/ 下面的所有模块吗?并不。Creator 支持非 assets/ 下的模块,例如,npm 里的模块,例如项目根目录下 libs-xxxxxxx/ 下面的模块。这些 Creator 无从知晓。
即使我们知道了哪些模块会被加载,比如我们破釜沉舟,扫描项目下的所有 .ts 和 .js 把它们都视为有可能加载的模块。我们还需要解决另一个问题——场景加载时候,哪些模块是需要的?例如,你一个模块里写了一个组件,这个组件在你第一个场景里用到了,那么 Creator 必须要在加载你这个场景之前加载好模块。场景和模块之间的关系是没有关联的,目前。
因此,现在 Creator 的做法就是,一股脑把所有模块都加载了。
如果想要实现这种需求, 我应该怎么改?
其实我只是想开发的时候不用手动去import, 通过一个函数 能自动创建我需要的对象
你给个你希望的代码效果示例?
能否换一种角度看这个需求,就是希望能 以类名来导入某个类所在的模块,而不用知道它所在模块的路径?如果可以,我建议是用 导入映射 · 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
好的 谢谢,我尝试下
即使这样的话 ,我还是需要在文件头部 把所有用的到文件 import的进来,
那样我的文件头部 会非常大, 对开发也不友好
按常规来讲:一个大项目大概在1k 个文件 那个量级挺大的
如果这样的话 ,动态热更新加载怎么做 ? 需要退出游戏重新启动吗?



