28

试图了解在哪里使用带有通配符的“地图”与“路径”是正确的。

查看 require 源(但肯定不是 100% 熟练使用它),这两个片段之间似乎在功能上没有区别。真的吗?

使用路径:

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

使用地图:

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

4 回答 4

13

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

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

另一方面,使用“map”,您可以拥有多个版本的资源(foo1、foo2...),您可以将它们映射为从不同的路径加载(即,您想从桌面浏览器加载 foo1,而 foo2 是从移动浏览器修改第一个)。

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

于 2014-06-19T11:47:55.917 回答
10

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

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

最后,为了能够在 Node 和浏览器中运行相同的配置,我删除了该map:*部分,并声明了所有内容,paths它现在对我来说工作得很好,即使我仍然希望得到关于原因的一些说明。

于 2014-01-04T15:56:18.827 回答
7

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

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

于 2014-08-08T08:42:20.133 回答
0

Magento 2 文档

paths配置,类似于,map不仅用于为调用 的任何真正的 AMD 模块设置别名,还用于为define()任何 JS 文件(甚至来自 URL)、HTML 模板等设置别名。Magento 使用它来为 URL 和第三方库设置别名。

paths: {
    'alias': 'library/file',
    'another-alias': 'https://some-library.com/file'
}

在为具有多个脚本源的数组设置路径时,如果第一个脚本加载失败,则将下一个脚本用作后备。

var config = {
    ...
    paths: {
        'alias': [
            'https://some-library.com/file',
            '<vendor_name>_<module_name>/js/file'
        ]
    }
};
于 2022-01-30T20:28:58.313 回答