试图了解使用带有通配符“路径”的“map”的正确位置。
查看需求来源(但肯定不是100%流利),似乎这两个片段在功能上没有区别。真的吗?
使用路径:
require.config({
baseUrl: "include/js/",
paths: {
foo: "stuff/foo",
}
});
使用地图:
require.config({
baseUrl: "include/js/",
map: {
'*': {foo: "stuff/foo"},
}
});
答案 0 :(得分:8)
我发现了一个区别,那就是requirejs加载器插件,示例示例:define(['cs!module'], function(){...} )
用于CoffeeScript。
使用config的map:*
部分声明插件(以及paths
依赖模块)在浏览器中工作。但是,在Node中,Requirejs将无法找到加载器插件,除非它们位于paths
下。
最后,为了能够在Node和浏览器中运行相同的配置,我摆脱了map:*
部分,并在paths
中声明了所有内容并且它工作得很好对我来说,即使我仍然希望得到一些澄清原因。
答案 1 :(得分:8)
来自RequireJS Docs“此外,路径配置仅用于设置模块ID的根路径,而不是用于将一个模块ID映射到另一个模块ID。”
这意味着“路径”仅用于在资源不在默认位置(baseUrl)时映射到资源的路径。我想这就是你想要做的事情。
另一方面,使用“map”,您可以拥有多个版本的资源(foo1,foo2 ...),您可以将其映射为从不同路径加载(即您希望从桌面浏览器加载foo1和foo2,它是移动浏览器中第一个的修改。)
所以,除非你有不同版本的foo,否则我会使用“path”,虽然你是对的,“map”也适用于那种情况。
答案 2 :(得分:4)
地图配置还有另外一个重要区别。 您可以定义将在映射中使用的前缀。
对于您的示例,这意味着foo
将映射到stuff/foo
,但foo/bar/baz/bam
也会映射到stuff/foo/bar/baz/bam
。