【问题标题】:Requirejs: paths vs mapRequirejs:路径与地图
【发布时间】:2022-01-31 04:28:58
【问题描述】:

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

查看 require 源(但肯定不是 100% 熟悉它),这两个 sn-ps 在功能上似乎没有区别。真的吗?

使用路径:

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

使用地图:

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

【问题讨论】:

    标签: requirejs


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      最后,为了能够在 Node 和浏览器中运行相同的配置,我去掉了 map:* 部分,并在 paths 中声明了所有内容,现在它对我来说很好用,即使我仍然希望能弄清原因。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

          Magento 2 docs

          paths 配置,类似于map,不仅用于为调用define() 的任何真正的 AMD 模块设置别名,还用于为任何 JS 文件(甚至来自 URL)、HTML 模板等设置别名。Magento 使用this 为 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'
                  ]
              }
          };
          

          【讨论】:

            猜你喜欢
            • 2014-02-06
            • 2013-05-25
            • 2013-01-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-08-03
            • 1970-01-01
            相关资源
            最近更新 更多