我在RequireJS中有点像菜鸟;我最近阅读了API documentation,并遇到了这两个术语:module ID
和module name
。它们可以互换使用吗?或者他们是不同的概念?
摘录:
http://requirejs.org/docs/api.html#jsfiles
默认情况下,RequireJS还假定所有依赖项都是脚本,因此它不希望看到尾随的" .js" 模块ID 的后缀。在将模块ID 转换为路径时,RequireJS会自动添加它。
http://requirejs.org/docs/api.html#config-paths
用于模块名称的路径不应包含扩展名,因为路径映射可能适用于目录。将模块名称映射到路径时,路径映射代码将自动添加.js扩展名。
http://requirejs.org/docs/api.html#modulenotes
加载程序按名称存储模块,而不是内部存储模块。因此,对于相对名称引用,这些相对于作为引用的模块名称进行解析,然后模块名称或 ID ,如果需要加载则转换为路径
答案 0 :(得分:5)
模块名称和模块ID是相同的,它们与模块路径不同。假设以下配置:
require.config({
baseUrl: '/lib/',
paths : {
bar : 'a/b/c',
flip : 'd/e/f',
'flip/flop': 'dir/dir/something'
}
});
您的第一句话说明了当您拨打require(['foo'], ...
之类的内容时会发生什么。上面的配置中没有paths
指定foo
转换为的内容。因此RequireJS将从模块id创建一个路径,即foo
。最终它会尝试加载文件/lib/foo.js
。
你的第二句话说明当你的模块 paths
时会发生什么。如果您require(['bar'], ...
,则在尝试加载时,RequireJS会将ID转换为/lib/a/b/c.js
。它增加了扩展本身。同样的引用也倾向于暗示你做require(['bar/baz'], ...
的情况。使用上面的配置,RequireJS会将模块ID分成两部分:bar
和baz
,会发现bar
具有paths
配置,因此会构建路径{ {1}}然后会向其添加/lib/a/b/c
和扩展程序,以便尝试加载文件baz
。因此,如果您具有相关模块的层次结构,则可以将该层次结构的根目录放在/lib/a/b/c/baz.js
中,而不是为层次结构中的每个模块指定路径。
第三个引用指出模块id是解释相关模块id时使用的。我们假设paths
已加载,其依赖项中包含flip/flop
。 RequireJS会将..
与flip/flop
合并为..
,然后RequireJS会将此模块ID转换为路径:flip
,因为d/e/f.js
具有映射flip
。有时人们认为RequireJS会相对于需要它的模块的路径解释paths
。该报价澄清事实并非如此。 (如果是这种情况,那么RequireJS会尝试加载..
。)