0

阅读了很多关于模块加载的内容后,我了解到,必须在单个 JavaScript 文件中定义一个模块。此规则在 dojo 层文件 ( http://download.dojotoolkit.org/release-1.9.0/dojo.js.uncompressed.js ) 中被破坏。我以为文件名是模块标识符的一部分,所以我不明白这个层文件中的模块是如何解析的,为什么没有“multipleDefine”错误;-)

4

1 回答 1

1

如果您查看构建的层文件的内容,您会发现它已被替换require为一次使用许多模块填充加载器的内部缓存的调用,如下所示:

require({
  cache: {
    'module/A': function(){
      // contents of module A
    },
    'module/B': function(){
      // contents of module B
    },
    // etc
  }
});

它不再是标准的 AMD 模块,这意味着:

  1. 如果您尝试将它与 Dojo 加载程序以外的加载程序一起使用,它将无法工作,并且
  2. 您可以在一个文件中定义多个模块。

顺便说一句,这个过程是您可以在模块内定义全局变量的原因,这些变量在构建前工作良好但在构建后中断(所有模块代码现在都在具有新词法范围的新函数中)。

于 2013-06-30T00:46:36.483 回答