Requirejs:路径与地图

时间:2013-10-07 03:19:27

标签: requirejs

试图了解使用带有通配符“路径”的“map”的正确位置。

查看需求来源(但肯定不是100%流利),似乎这两个片段在功能上没有区别。真的吗?

使用路径:

  require.config({
    baseUrl: "include/js/",
    paths: {
     foo: "stuff/foo",
    }
  });

使用地图:

  require.config({
    baseUrl: "include/js/",
    map: {
     '*': {foo: "stuff/foo"},
    }
  });

3 个答案:

答案 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