我有以下内容。
require([ 'a', 'b' ], function() {
if(x){
require([ 'c', 'd' ], function( ) {});
}
});
c
将始终加载d
。是否有优化器优化c
和d
以便它们作为一个文件加载?
编辑:
我也使用r.js作为优化器。我的构建脚本的模块看起来像这样。
modules: [
{
name: "main",
},
{
name: "c",
include: ["d"]
}
]
这将包括d
中的c
,但c
和d
仍在运行时加载。
答案 0 :(得分:2)
r.js
(我假设你的意思是“优化器”)不会触及c
和d
,除非你明确要求[“你可以始终使用 include 选项明确添加通过优化程序静态分析找不到的模块。“ - 来自RequireJS docs]。如果你这样做,他们将最终进入优化输出,并将在运行时与a
和b
及其余代码一起加载(即使x
为{{1}永远不会到达false
块。
如果不这样做,require
将跳过该块,r.js
将仅在运行时解析RequireJS
和c
(如果d
为{{ 1}}),当进行任何优化或连接时为时已晚。
RE:编辑
在[{1}}中强制包含x
和true
的正确方法是:
c
这意味着:“明确要求包含所有内容d
,但也要添加main
和 modules: [ {
name: "main",
include: ["c", "d"]
} ]
”
RE:评论:
哦,你说对了,你的配置也会创建一个包含main.js
和c.js
的优化d.js
,但c.js
会加载'standalone'{{ 1}}无论如何。奇怪的是,它仍将使用优化文件中的c
,甚至不会评估独立d
(通过编辑优化RequireJS
和d
的内容进行检查。我猜RequireJS会立即请求所有列出的依赖项,因为它无法知道加载d
会使d.js
依赖性得到满足(这只在模块加载和处理后才知道)。这是有道理的,因为唯一的另一个选择是逐个请求文件 - 这将是一个瓶颈。
答案 1 :(得分:1)