我正在用 javascript 开发一个模块化框架,并且正在寻找一种方法来自动优化/组合一组 javascript 作为预编译步骤。
我已经在使用 grunt,所以 grunt-task 可能是有意义的。
该框架由它们自己的文件中的模块组成(就像我们都习惯的矩形“小部件”),而这些模块又可能需要其他 javascript。
所有这些都是使用 Require.js 连接的,效果很好。但是,在尝试使用require.js附带的 r.js时,我遇到了以下限制
优化器只会组合在传递给顶层 require 和 define 调用的字符串文字数组中指定的模块,或者在简化的 CommonJS 包装中组合 require('name') 字符串文字调用。因此,它不会找到通过变量名加载的模块:
问题是:模块可以相互继承,甚至可以通过配置组合其他模块(技术需要加载位于它们自己的js文件中的引用模块)。
这不适用于上面提到的约束。我确信我可以用足够的时间自己做点什么,但也许有人已经做过这样的事情了。(r.js 但更灵活)。
一个可行的解决方案恕我直言:
- 让 precompile-task 运行一次需要优化 js 的页面(但是在 Node 的服务器上而不是在客户端上,框架能够做到这一点)
- 并以某种方式跟踪 require.js 加载的所有库
- 以某种方式读出 require.js ,瞧,这是要加载的 js 脚本列表。
- 通过
include
它提供的把它交给 r.js,然后 r.js 从那里处理它。 - 顺便说一句,还有更多的页面类型。但是在 r.js 中似乎可以定义公共库,因此它们不会包含在每页优化文件中。
这听起来合理吗?有人尝试过这样的事情吗?