为什么requirejs允许您指定字符串ID?

时间:2014-08-12 09:35:49

标签: javascript requirejs

在requirejs中,可以定义匿名模块或为其指定字符串ID。根据{{​​3}},您通常不会使用字符串id:

  

定义模块时通常不会使用id。优化RequireJS应用程序时,它通常由工具使用。

我目前匿名定义我的模块,并使用require.config.paths作为映射。我不明白的是:为什么requirejs允许你指定字符串id,如果不需要它们?

2 个答案:

答案 0 :(得分:1)

  

为什么requirejs允许你指定字符串id,如果它们不需要?

如果需要可以找出刚刚调用的define模块,则不需要它们。当require()加载包含模块的脚本文件时,这是标准,该模块的名称和路径知道。

但是,优化器会将多个模块放在一个文件中,并且需要采用不同的方法来确定哪些模块是define() d。来自the docs

  

这些[名称]通常由optimization tool生成。您可以   自己明确地命名模块,但它减少了模块   便携式 - 如果您将文件移动到另一个目录,则需要   改名称。通常最好避免使用名称进行编码   模块,让优化工具在模块名称中刻录。   优化工具需要添加名称以便多个名称   模块可以捆绑在一个文件中,以便更快地加载   浏览器。

答案 1 :(得分:0)

我无法回答詹姆斯伯克的动机,但我可以指出它有用的实例。

  • 定义您自己的单页"图层"用于测试,使用JSBin或JSFiddle。以下代码可以轻松执行,而无需为每个模块站起来或使用r.js创建图层。

    define('A',[], function(){ console.log('A loaded');});
    define('B',[], function(){ console.log('B loaded');});
    define('c',['A','B'], function(){ console.log('C loaded');});
    
  • 定义"本地覆盖"用于故障排除在define之前添加require,轻松抢占模块定义添加新模块,这样您就可以在工作时不必触摸多个文件

    define('plugin/fancySelect',[], function(){/* ... */});
    require([ /* ... */], function(){
      // your main application code
    });