我已成功优化了我的项目:
main.js
----------------
main.js
lib/jquery/jquery.js
lib/underscore/underscore-min.js
lib/aura/base.js
lib/aura/core.js
etc...
login.js
----------------
models/page.js
models/user.js
helpers/permissions.js
helpers/pager.js
login.js
etc...
出于某种原因,当我加载登录页面时...它仍然跟踪已包含在公共文件(main.js)中的依赖项。所以,我有jquery,下划线等的个别请求。
我正在使用multi-page shim example,所以:
require(['main'], function (main) { require(['login']) });
为什么不使用通用模块来查找这些依赖项的任何想法?
答案 0 :(得分:0)
我在使用RequireJS的Play Framework项目中一直在与同样的奇怪行为作斗争。问题的原因是顶级模块正在调用require
并提供了错误的模块名称。不幸的是,这个不正确的模块名称可以由RequireJS加载,并将整个过程引导到错误的依赖关系图,最后我得到了对每个文件的单独请求。
我想这只是Play Framework项目的一个潜在错误,因为所有单独的JavaScript文件实际上都是部署的一部分(当你不改变你的构建配置时)而不仅仅是单个(或者在某些情况下)已经包含内联所需内容的多个优化的。
另一方面,我也使用了https://github.com/requirejs/example-multipage-shim,对我而言,它开箱即用。在 www-built 文件夹中使用输出时,RequireJS实际上只会执行两个HTTP请求来获取它所需的内容。
对于任何看到此问题的人,我建议您查看RequireJS优化器的输出并查看RequireJS模块的名称(即define
中潜在依赖项前面的字符串参数呼叫)。您可以通过为UglifyJS启用代码美化来使优化器输出更具可读性,请查看https://github.com/jrburke/r.js/blob/master/build/example.build.js#L155以获取配置设置。