dojo.require 未按递归顺序加载

dojo.require not loading in recursive order

我正在尝试将我的一些 dojo 1.7 代码库移到网上。我在服务器上启用了 CORS,local/online 文件加载 dojo.require

虽然这对本地文件工作正常,但 http 文件将无法以递归顺序加载。例如,

dojo.registermodulepath("my.path", "http://my.path");
dojo.require(my.path.module1);
dojo.require(my.path.module2);

现在,假设 module1 文件已加载,并且有自己的子依赖项,dojo.require 应该首先加载那些子依赖项;但我观察到对于在线文件,它会直接加载 module2 并破坏顺序。

因此,该应用无法运行。怎么会?

你可以设置

  <script>
dojoConfig= {
     async: false
};
</script>

或者在 AMD 风格中,您只能在模块 1 加载后加载模块 2

一般来说,相同 "level" 的依赖项(例如同一模块中的两个 dojo.require 调用)预计不会依赖于顺序。如果 module2 确实依赖于 module1 已被加载,那么 module2 本身应该包含对 module1require 调用,这将准确地表达递归依赖。

我建议不要假设 dojo.require 同步运行 - 在该假设下运行会​​破坏您尝试进行跨域构建或更新以在适当的 AMD 模式下使用 async: true.

同时,如果 "local" 您指的是文件系统访问,强烈 建议使用实际的 Web 服务器来 运行 Web 应用程序。浏览器通常对 file:// URL 的操作更加严格,例如阻止 XHR。