如何在本地测试跨域构建?

时间:2009-12-17 15:07:52

标签: dojo doh

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

看来,有三个可能的选项(每个都有自己的缺点):

  1. 使用本地(非xd)XMLHttpRequest dojo.require
    • 此选项并不真正测试xd行为,因为它通过XHR同步地查询[s] js。
  2. djConfig.debugAtAllCosts = true;
    • 虽然这个选项确实异步加载了所需的代码(通过'script'标签),但它也会通过XHR拉取代码,解析其中的dojo.require [s],并将它们拉入。这个(使用loader_debug),再次,不是loader_xd正在做的事情。 More info on this topic in a different question.
  3. 创建跨域构建
    • 这种方法需要构建,这在我运行代码的环境中是不可能的(我们正在使用我们自己的动态构建过程,其中仅包含特定所需的js)这个过程不适合开发)。
  4. 因此,我的问题是:有没有办法使用loader_xd,它不需要xd构建(将xd前缀/后缀添加到每个文件中)?

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

2 个答案:

答案 0 :(得分:3)

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

制作自己的脚本需要花费一些工作,但你可以查看util / buildscripts / build.js作为指针。

我希望将来Dojo(可能是Dojo 2.x时间帧)我们可以切换到一个加载器,它只使用脚本标签,模块格式在模块周围有一个函数包装器,由开发人员编写。这将允许相同的模块格式在本地和xd情况下工作。

答案 1 :(得分:1)

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

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