【问题标题】:Require.js and optimize through r.js: how to figure out optimal way to combine modules for multiple pages?Require.js 并通过 r.js 进行优化:如何找出为多个页面组合模块的最佳方式?
【发布时间】:2025-12-05 18:10:01
【问题描述】:

使用 Require.js,它工作得非常可靠。

但是,我正在阅读有关使用 r.js 进行优化的文章 (http://requirejs.org/docs/optimization.html)。

据我了解,它将*定义的模块捆绑到 1 个文件中(很好,因为:更少的 http-calls,minified )。

当我只定义了 1 个页面类型时,这似乎很好,即:要加载一组必需的模块。但是,在任何普通网站中,您都会有多个页面类型,每个页面类型都需要不同的模块。

现在,我只是想知道 r.js 到底有多聪明?在确定将哪些模块打包在一起时,是否考虑了所有多个页面(具有不同的“要求”),这样即使模块中有大量重叠,我最终也不会为 X 页面类型使用 X 捆绑的 javascriptfiles包含在每个捆绑脚本中。

我需要给优化器的任何提示,是否自动处理等?

非常感谢澄清,。

【问题讨论】:

  • 别以为它那么聪明。认为您能做的最好的事情是将您的公共模块优化为 common.js,并从优化的页面模块中浅层排除每个(使用的)公共模块。然后,您的页面将导入单个优化的页面模块,并导入优化的公共模块。

标签: requirejs


【解决方案1】:

我的理解是优化器通过查找require() 调用来查找文件的依赖项,并列出它找到的内容。 (所以它只找到作为文字字符串传递给require() 的依赖项。)然后将文件与其依赖项(递归)组合到一个文件中,并最小化。

您可以在配置中控制进入模块的内容。这是一个示例:

({

baseUrl: "Website/Scripts",
dir: "Staging/Scripts",
modules: [
    { name: "main", include: ["Rotator"], exclude: ["jwPlayerDialog"] },
    { name: "jwPlayerDialog" }
],
paths: {
    "jquery": "empty:"
},
fileExclusionRegExp: /^\.|Microsoft|modernizr|unobtrusive|\.min\.|\.debug\./
})

如果您关闭最小化,您可以轻松查看每个文件中包含的内容。一个模块可以包含在多个文件中。例如,上面的Rotator 模块将在main.js 中,它仍然可以作为Rotator.js 使用。

【讨论】:

    最近更新 更多