在requirejs中,可以定义匿名模块或为其指定字符串ID。根据{{3}},您通常不会使用字符串id:
定义模块时通常不会使用id。优化RequireJS应用程序时,它通常由工具使用。
我目前匿名定义我的模块,并使用require.config.paths
作为映射。我不明白的是:为什么requirejs允许你指定字符串id,如果不需要它们?
答案 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
});