Requirejs:路径与地图

Sha*_*e H 24 requirejs

试图了解使用"map"与通配符vs"paths"的正确位置.

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

使用路径:

  require.config({
    baseUrl: "include/js/",
    paths: {
     foo: "stuff/foo",
    }
  });
Run Code Online (Sandbox Code Playgroud)

使用地图:

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

Dea*_*ffe 9

我发现了一个区别,那就是requirejs加载器插件,例如:示例:define(['cs!module'], function(){...} )for CoffeeScript.

使用map:*config 的一部分来声明插件(以及paths依赖模块)在浏览器中工作.但是,在Node中,Requirejs将无法找到加载器插件,除非它们位于paths.

最后,为了能够在Node和浏览器中运行相同的配置,我摆脱了map:*部分,并宣布了所有内容paths,它现在对我来说很好,即使我仍然希望得到一些澄清原因.


小智 9

来自RequireJS Docs"此外,路径配置仅用于设置模块ID的根路径,而不是用于将一个模块ID映射到另一个模块ID."

这意味着"路径"仅用于在资源不在默认位置(baseUrl)时映射到资源的路径.我想这就是你想要做的.

另一方面,使用"map",您可以拥有多个版本的资源(foo1,foo2 ...),您可以映射以从不同的路径加载(即您想从桌面浏览器加载foo1和foo2,这是从移动浏览器修改第一个).

所以,除非你有不同版本的foo,否则我会使用"path",尽管你是对的,"map"也适用于那种情况.


Ion*_*opa 5

映射配置还有另一个重要区别。您定义将在映射中使用的前缀

对于您的示例,这意味着foo将被映射到,stuff/foo但也foo/bar/baz/bam将被映射到stuff/foo/bar/baz/bam