【问题标题】:RequireJS: module ID vs module nameRequireJS:模块 ID 与模块名称
【发布时间】:2015-06-26 01:35:25
【问题描述】:

我是 RequireJS 的菜鸟;我最近阅读了API documentation,遇到了这两个术语:module IDmodule name。它们可以互换使用吗?还是它们在某种程度上是不同的概念?

摘录:

http://requirejs.org/docs/api.html#jsfiles

RequireJS 还假定默认情况下所有依赖项都是脚本,因此它不希望在 模块 ID 上看到尾随的“.js”后缀。 RequireJS 会在将模块 ID 转换为路径时自动添加。

http://requirejs.org/docs/api.html#config-paths

用于模块名称的路径不应包含扩展名,因为路径映射可能用于目录。路径映射代码在将模块名称映射到路径时会自动添加.js扩展名。

http://requirejs.org/docs/api.html#modulenotes

加载器通过名称而不是内部路径来存储模块。因此,对于相对名称引用,它们是相对于进行引用的模块名称解析的,然后如果需要加载 模块名称ID,则将其转换为路径.

【问题讨论】:

    标签: javascript requirejs amd js-amd


    【解决方案1】:

    Module name 和 module id 是同一个东西,它们在模块路径上是不同的。假设如下配置:

    require.config({
        baseUrl: '/lib/',
        paths  : {
            bar        : 'a/b/c',
            flip       : 'd/e/f',
            'flip/flop': 'dir/dir/something'
        }
    });
    

    您的第一句话是关于当您拨打require(['foo'], ... 之类的电话时会发生什么。上面的配置中没有 paths 指定 foo 转换为的内容。因此 RequireJS 将从模块 id 创建一个路径,即foo。最终它会尝试加载文件/lib/foo.js

    您的第二个引述谈到了当您的模块paths 时会发生什么。如果你是require(['bar'], ...,那么RequireJS 会在尝试加载它时将id 转换为/lib/a/b/c.js。它添加了扩展本身。同样的引用也间接地暗示了你会做require(['bar/baz'], ... 的情况。使用上面的配置,RequireJS 会将模块 id 一分为二:barbaz,会发现bar 有一个paths 配置,因此会构建路径/lib/a/b/c,然后添加@987654336 @ 给它和扩展名,所以它会尝试加载文件/lib/a/b/c/baz.js。因此,如果您有相关模块的层次结构,您只需将该层次结构的根放在 paths 中,而不是为层次结构中的每个模块指定路径。

    第三个引用指出模块 id 是解释相对模块 id 时使用的。假设flip/flop 已被加载,它的依赖项中有..。 RequireJS 会将flip/flop 与解析为flip.. 结合起来,然后RequireJS 会将这个模块id 转换为一个路径:d/e/f.js,因为flippaths 中有一个映射。有时人们认为 RequireJS 会相对于需要它的模块的path 解释..。报价澄清事实并非如此。 (如果是这种情况,那么 RequireJS 会尝试加载 dir/dir.js。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多