【问题标题】:requireJS optimizer does not include nested require callsrequireJS 优化器不包括嵌套的 require 调用
【发布时间】:2012-07-25 06:39:00
【问题描述】:

我正在阅读优化器文档很长一段时间,但似乎我无法理解。医生说:

优化器只会组合数组中指定的模块 传递给顶层 require 和 define 的字符串字面量 调用,或简化的 require('name') 字符串文字调用 CommonJS 包装。因此,它不会找到通过 变量名:

到目前为止还不错。这基本上意味着 r.js 不会包含也不会抓取嵌套的依赖项。现在假设我们有一个“主应用程序”文件,如下所示:

require([ 'es5shim', 'tools' ], function() {
    console.log('fictive app entry point');

    require([ 'domready!' ], function( doc ) {
        console.log('domReady, loading GUI modules...');
        require([ 'GUI/window', 'GUI/header', 'GUI/content' ]);
    });
});

我想问题在这里变得非常明显。 r.js(优化器)仅通过将es5shim.jstools.js 链接到该文件来创建该文件。有什么好的方法/解决方法可以告诉优化器,它还应该在这个例子中链接window.jsheader.jscontent.js 文件?

当然,此实例中的domReady 插件将被加载并最终执行回调,但此处的结构本身似乎阻止了优化器完成其工作。

问题是

  • 如果我只是在“Top require call”中列出所有模块,r.js 是否还包括+链接所有来自嵌套和嵌套的顶部 requiredefine 调用- 将模块嵌套到 main-app 文件中?

  • 他们在文档中提到了 r.jsinclude 选项。它在这里有意义吗?如果是,如何正确调用它?

当然你不希望以后失去延迟加载模块的选项,但是对于这种依赖(等待 DOMContentLoaded),我希望有办法解决这个问题。

【问题讨论】:

  • 我不明白:你为什么要嵌套需求?为什么不让 GUI/窗口依赖 es5shim,让 es5shim 依赖 domready! ?

标签: javascript requirejs


【解决方案1】:

默认情况下,RequireJS 不会扫描嵌套的 require 调用,因为它假定这些调用是为了在运行时加载依赖项。您可以通过设置

来覆盖它
findNestedDependencies: true

在您的优化配置中。希望对您有所帮助。

【讨论】:

  • 这真的很有用,但在 RequireJS 文档中并不是特别容易找到
  • 请注意,如果您使用 require = {...} 形式声明配置,这将不起作用,因为 require 变量将隐藏嵌套的 require 调用。使用不同的配置格式修复它,例如需要js.config({...})
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多