最初我并没有预料到这项任务会有任何问题。我只是逐个用 cljs.loader/load 加载它们,直到...
直到我遇到了 '在模块1加载时调用 beforeLoadModuleCode() 而模块 module2 正在加载' 的问题
我首先意识到加载是异步的,模块加载实际上并没有在加载退出时完成。查看 goog.module.ModuleManager 让我有一种印象,它的 load() 函数可以在前一个模块完成加载之前排队加载新的模块。
我的印象是问题在于 cljs.loader/load 在错误的时间调用 beforeLoadModuleCode()。它似乎必须在评估模块代码的开始时调用,而不是在下载它之前,即,setLoaded 是模块的最后一条指令,而 beforeLoadModuleCode 必须是第一条。
然而,我仍然不确定我是否正确理解了 ModuleManager 的整个概念,所以我需要确认我是否正确。