Requirejs:路径与地图

Requirejs:路径与地图,requirejs,Requirejs,试图理解使用通配符vs“路径”的“映射”在哪里是正确的 查看require源代码(但肯定不是100%流利),这两个代码片段在功能上似乎没有什么不同。这是真的吗 使用路径: require.config({ baseUrl: "include/js/", paths: { foo: "stuff/foo", } }); 使用地图: require.config({ baseUrl: "include/js/", map: {

试图理解使用通配符vs“路径”的“映射”在哪里是正确的

查看require源代码(但肯定不是100%流利),这两个代码片段在功能上似乎没有什么不同。这是真的吗

使用路径:

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

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

我发现了一个不同点,那就是requirejs加载程序插件的例子:
define(['cs!module'],function(){…})
forCoffeeScript

使用配置的
映射:
部分来声明插件(以及
路径
用于从属模块)在浏览器中工作。然而,在节点中,Requirejs将无法找到加载程序插件,除非它们位于
路径下

最后,为了能够在节点和浏览器中运行相同的配置,我去掉了
映射:
部分,并在
路径中声明了所有内容,现在它对我来说运行良好,即使我仍然希望从RequireJS文档中得到一些解释。

此外,路径配置仅用于设置模块ID的根路径,而不用于将一个模块ID映射到另一个模块ID

这意味着“路径”是指当资源不在默认位置(baseUrl)时,只映射到资源的路径。我猜这就是您试图做的

另一方面,通过“映射”,您可以拥有多个版本的资源(foo1、foo2…),您可以将其映射为从不同路径加载(即,您希望从桌面浏览器加载foo1,从移动浏览器加载foo2,这是对第一个版本的修改)


因此,除非您有不同版本的foo,否则我将使用“path”,尽管您是对的,“map”在这种情况下也会起作用。

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

例如,这意味着
foo
将映射到
stuff/foo
,但
foo/bar/baz/bam
也将映射到
stuff/foo/bar/baz/bam