24

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

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

好的,到目前为止一切都很好。这基本上意味着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.jses5shim.js (优化器)仅通过链接并tools.js进入该文件来创建该文件。有没有什么好的方法/解决方法来告诉优化器,它也应该在这个例子中链接window.js,header.js和文件?content.js

当然domReady,这个实例中的插件会被加载并最终执行回调,但是这里的结构本身似乎阻止了优化器完成它的工作。

问题是

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

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

当然,您不希望稍后失去延迟加载模块的选项,但是对于这种依赖(等待 DOMContentLoaded),我希望有一种解决方法。

4

1 回答 1

45

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

findNestedDependencies: true

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

于 2012-08-10T20:02:00.043 回答