javascript - 将嵌套模块与 require.js 优化器结合起来

标签 javascript requirejs amd r.js

我有以下内容。

require([ 'a', 'b' ], function() {     
   if(x){
       require([ 'c', 'd' ], function( ) {});
   }   
});

c 将始终加载 d。有没有办法让优化器优化 cd 以便它们作为一个文件加载?

编辑:

我还使用 r.js 作为优化器。我的构建脚本的模块看起来像这样。

modules: [
    {
        name: "main",
    },
    {
        name: "c",
            include: ["d"]
    }
] 

这将在 c 中包含 d,但 cd 仍会在运行时加载。

最佳答案

除非你明确要求它 [“您始终可以使用 include 选项明确添加通过优化器的静态分析找不到的模块。” - 来自 RequireJS docs ].如果这样做,它们将最终出现在优化输出中,并将在运行时与 ab 以及其余代码一起加载(即使 xfalse 并且永远不会到达 require block )。

如果不这样做,r.js 将跳过该 block ,RequireJS 将仅解析 cd 在运行时(如果 xtrue),此时进行任何优化或连接都为时已晚。

回复:编辑

main 中强制包含 cd 的正确方法是:

    modules: [ {
        name: "main",
        include: ["c", "d"]
    } ] 

这意味着:“包括 main.js 显式要求的所有内容,但还添加 c.jsd.js

回复:评论:

哦,你是对的,你的配置还将创建一个优化的 c.js,其中包括 cdRequireJS 无论如何都会加载“独立”d。奇怪的是,它仍然会使用优化文件中的 d,甚至不会评估独立的 d.js(通过编辑优化的 c.js 的内容进行检查d.js)。我猜 RequireJS 会立即请求所有列出的依赖项,因为它无法知道加载 c 是否会满足 d 依赖项(这只有在加载和处理模块后才知道) .这是有道理的,因为唯一的其他选择是按顺序逐个请求文件 - 这将成为瓶颈。

关于javascript - 将嵌套模块与 require.js 优化器结合起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14784424/

相关文章:

javascript - 使用按钮更改同一父容器中输入字段中的数字

linux - AMD GPU 无法在 Linux 上使用 Blender 的 "Cycles Render"

javascript - 将复选框限制为仅三个复选框 - 如何?

javascript - 这个 .net 编码类型是什么

javascript - Bower、browserify、requirejs、webpack 之间的区别?

javascript - 简单的 RequireJS 测试不起作用

javascript - Ember 和 Require.JS 优化器 "Error: Could not find module jquery"

javascript - 在 SuiteScript 2.0 中引用自定义 AMD 模块

node.js - 包装许多内部模块以在 typescript 中导出

javascript打开和关闭当前窗口