requireJS优化器不包含嵌套的require调用

jAn*_*ndy 24 javascript requirejs

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

优化器将仅结合了在字符串文字的数组传递给顶层规定指明模块,并定义呼叫,否则需要在简化的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' ]);
    });
});
Run Code Online (Sandbox Code Playgroud)

我想问题在这里变得非常明显.r.js(优化器)仅通过链接es5shim.js和创建该文件tools.js.有没有什么好的办法/解决方法告诉优化,它也应该链接的window.js,header.jscontent.js文件中的例子吗?

当然domReady,这个实例中的插件会被加载,最终会执行回调,但看起来这里的结构本身会阻止优化器完成它的工作.

问题是:

  • 如果我只是列出"Top require call"中的所有模块,那么r.js是否还包括+链接所有top require以及define从嵌套和嵌套嵌套模块到main-app文件的调用?

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

当然,你不想失去的选项后,在延迟加载的模块,但是对于这种依赖(等待DOMContentLoaded),我希望有一种方式来变通方法.

Aar*_*ius 46

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

findNestedDependencies: true
Run Code Online (Sandbox Code Playgroud)

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

  • 这非常有用,并且在RequireJS文档中找不到特别容易的内容 (5认同)