命名空间 => 到模块路径是通过替换句点 (.) 来检索的,简而言之 - 您需要用点替换斜杠。你的要求应该是
dojo.require('dojo.dom'); // blocking call? djConfig.async must be false
由于错误与 dojo.require 指定的路径有关,这意味着您的 dojo.js 已找到并已加载(dojo.require 未定义)- baseUrl 与 dojo 模块无关。
问题是,您正在使用旧版加载程序来拉入 AMD 模块,在 1.7+ 中,require 语句的外观有所不同。
// AMD loader form is
function callbackFunctionOnComplete(dojoDom) { }
require([ "dojo/dom" ], callbackFunctionOnComplete); // non-blocking
因此,dojo.require
工作原理如下,假设我们作为字符串传递的参数称为 'module;
dojo.require = function(module) {
var parts = module.split('.');
1 - 获取顶级命名空间(全局)
var packageName = parts.shift(); // first part is the package name
2 - 获取文件名(减去 .js)
var id = parts.pop(); // the last bit
3 - 将中间的所有内容转换为路径(相对于 packagelocation)
var mid = parts.join("/");
4 - 查找包(从顶层)位置
var fullpath = // in pseudo
foreach dojoconfig.packages
iff obj.name == packageName
set to obj.location
5 附加其余部分并开始下载模块
fullpath += mid + id + '.js'
transport.get(..... fullpath .....)