3

使用 dojo 工具包,在不进行实际构建的情况下,在本地测试将作为跨域执行的代码的正确方法是什么?

看起来,有三种可能的选择(每种都有自己的缺点):

  1. 使用本地(非 xd)XMLHttpRequest dojo.require
    • 这个选项并没有真正测试 xd 的行为,因为它通过 XHR 同步地 dojo.require[s] js。
  2. djConfig.debugAtAllCosts = true;
    • 尽管此选项确实异步加载所需的代码(通过“脚本”标签),但它也通过 XHR 拉入代码,解析其中的 dojo.require[s],并将它们拉入。这(使用 loader_debug),同样,这不是 loader_xd 正在做的事情。在另一个问题中有关此主题的更多信息。
  3. 创建跨域构建
    • 这种方法需要构建,这在我运行代码的环境中是不可能的(我们使用我们自己的即时构建过程,其中仅包括特定页面所需的 js。这个过程不适合开发)。

因此,我的问题是:有没有办法使用 loader_xd,它不需要 xd 构建(它将 xd 前缀/后缀添加到每个文件)?

第二种方式(使用 debugAtAllCosts)也让我质疑预解析 dojo.require[s] 的动机。如果 loader_xd 不会(或者更确切地说不能)预解析,为什么为测试/调试创建的方法会这样做?

4

2 回答 2

3

佩勒描述了情况。如果您只想为您的模块生成 .xd.js 文件,您可以查看 util/buildscripts/jslib/buildUtilXd.js 及其 buildUtilXd.xdgen() 函数。

制作自己的脚本需要一些工作,但您可以查看 util/buildscripts/build.js 以获取指针。

我希望在未来的 Dojo(可能是 Dojo 2.x 时间框架)中,我们可以切换到仅使用脚本标记的加载器,该加载器的模块格式具有模块格式的函数包装器,由开发人员编码。这将允许相同的模块格式在本地和 xd 情况下工作。

于 2009-12-17T21:53:06.267 回答
1

我认为没有任何方法可以在不构建和部署的情况下进行 XD 加载。您对各种选项的分析似乎是正确的。

debugAtAllCosts 专门用于解决调试问题,直到最近,大多数浏览器都无法对通过 eval 引入的代码执行任何智能操作。直到今天,Firefox 仍会在控制台中报告异常出现在 eval 站点 (bootstrap.js) 中,其中行号偏移 eval,而不是实际的 eval 缓冲区,并且通常该 eval 缓冲区是匿名的。Firebug 是第一个跳过一些障碍以增强调试体验并允许 Dojo 的加载程序在 XHR 和 eval 之间注入特殊元数据以确定源文件路径的调试器。Webkit/Safari 最近也实现了这一点。我相信 debugAtAllCosts 早于 XD 加载程序。

于 2009-12-17T18:57:26.140 回答