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

Javascript 为什么requirejs允许您指定字符串id?,javascript,requirejs,Javascript,Requirejs,在requirejs中,可以定义匿名模块或为其提供字符串id。根据,通常不使用字符串id: 在定义模块时,通常不会使用id。它通常由工具在优化RequireJS应用程序时使用 我目前以匿名方式定义模块,并使用require.config.path进行映射。我不明白的是:如果不需要字符串id,为什么requirejs允许您指定它们?我无法回答James Burke的动机,但我可以指出它有用的例子 使用JSBin或JSFIDLE定义您自己的单页“层”进行测试。下面的代码可以很容易地执行,而不必为每

在requirejs中,可以定义匿名模块或为其提供字符串id。根据,通常不使用字符串id:

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


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

我无法回答James Burke的动机,但我可以指出它有用的例子

  • 使用JSBin或JSFIDLE定义您自己的单页“层”进行测试。下面的代码可以很容易地执行,而不必为每个模块建立端点或使用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');});
    
  • 为故障排除定义“本地覆盖”。在您的
    require
    之前添加
    define
    以轻松抢占模块定义添加新模块,这样您就不必在工作时接触多个文件

    define('plugin/fancySelect',[], function(){/* ... */});
    require([ /* ... */], function(){
      // your main application code
    });
    
如果不需要,为什么requirejs允许您指定字符串id

只有当require能够确定刚刚调用的模块是什么时,才不需要它们。当
require()
加载包含模块的脚本文件时,这是标准的,它知道模块的名称和路径

但是,优化器会将多个模块放在一个文件中,需要有不同的方法来确定哪些模块是
define()
d。发件人:

这些[名称]通常由生成。你可以 自己显式命名模块,但这样会减少模块的数量 可移植--如果将文件移动到另一个目录,则需要 更改名称。通常情况下,最好避免在代码名中进行编码 模块,只需让优化工具在模块名称中燃烧即可。 优化工具需要添加名称,以便多个 模块可以捆绑在一个文件中,以便在 浏览器


因此,如果没有显式声明字符串id,requireJS将使用文件位置作为id,对吗?我想这就是为什么只有一个
define
的文件可以省略字符串id,因为它可以推断出来?是的,这就是它的工作原理。我不确定文档中是否有明确提及。我接受了另一个,因为它更像是对我问题的直接回答,但这是一个很好的补充!