Javascript r.js真正做什么?

Javascript r.js真正做什么?,javascript,requirejs,amd,r.js,Javascript,Requirejs,Amd,R.js,我试图了解大众化的好处 似乎 连接手动选择的JavaScript文件列表 丑化/最小化组合代码 对CSS文件执行一些类似的操作(组合它们) 此外,(它与一般的合并/缩小工具的不同之处)它似乎 将节点样式require()模块转换为AMD样式模块 命名匿名模块(例如定义(['dependency'],function(){…}) 提供一些对加载程序插件的支持,例如内联CSS文件 它确实不似乎 分析并自动解析在文件中找到的依赖项(例如,仅因为r.js找到一个define([“foo”],…

我试图了解大众化的好处

似乎

  • 连接手动选择的JavaScript文件列表
  • 丑化/最小化组合代码
  • 对CSS文件执行一些类似的操作(组合它们)
此外,(它与一般的合并/缩小工具的不同之处)它似乎

  • 将节点样式
    require()
    模块转换为AMD样式模块
  • 命名匿名模块(例如
    定义(['dependency'],function(){…}
  • 提供一些对加载程序插件的支持,例如内联CSS文件
它确实似乎

  • 分析并自动解析在文件中找到的依赖项(例如,仅因为r.js找到一个
    define([“foo”],…)

这是正确的,还是我遗漏了什么?

您错了,因为
r.js
会自动解析依赖项。如果您有一个
main.js
文件,其中包含以下内容:

define(["foo"], function (foo) {
});
然后,如果您要求
r.js
main.js
创建一个优化的模块,它将在构建中包含模块
foo
的代码

一些警告:

  • 可以告诉
    r.js
    排除模块。因此,如果您认为应该在优化包中的模块不存在,则可能是该模块已被排除。(您知道如何使用
    r.js
    ,但是如果您使用其他人生成的捆绑包,并且您想知道,那么这可能就是答案:他们明确地从构建中排除了依赖项。)

  • r.js
    不会找到嵌套依赖项,除非您告诉它。例如:

    define(function () {
        require(["foo"], function (foo) {
        });
    });
    
    r.js
    不会发现
    foo
    是必需的,除非您在构建配置中将
    findnestedpences
    设置为
    true

  • r.js
    只能在
    require
    define
    调用期望依赖项的位置找到以字符串列表形式指定的依赖项。因此,如果您这样做:

    define(function () {
        var deps = ["foo"];
        require(deps, function (foo) {
        });
    });
    
    然后
    r.js
    将不知道
    foo
    是一个依赖项,因为在
    中需要(deps,…
    您的依赖项显示为符号引用,而不是字符串列表。您必须在生成配置中手动将
    foo
    指定为依赖项。没有可启用的标志以使
    r.js
    查找这些情况


  • 嗯,我的编辑不正确吗?你真的是说它应该“将文件
    foo.js
    包含到包中,仅仅因为r.js找到了一个
    define([“foo”],…)
    ”?如果代码已经存在(
    foo
    已定义),我不明白你为什么要它加载
    foo.js
    文件。:“[r.js]将相关脚本合并到构建层中并缩小它们”。依赖关系图本身在运行时仍会被解析,所有模块都被简单地放在一起,因此不需要单独获取资源。@Bergi:不知道您的编辑,但是的,我想确保r.js不会自动解析任何依赖关系是正确的。我不是说它应该这样做。它只是看起来不正确告诉我,r.js做了一些繁重的JavaScript解析/处理,并希望确保我理解该过程中的所有步骤。@user2864740:因此,对于已经是AMD风格的模块,r.js不做任何经典组合器/小型化器无法完成的特殊处理(无需批评)@UdoG我的意思是:正常的模块/文件依赖关系将被包括在内,除非排除在外,但对象图/加载顺序不会被包括在内。