1

我正在用 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 中似乎可以定义公共库,因此它们不会包含在每页优化文件中。

这听起来合理吗?有人尝试过这样的事情吗?

4

1 回答 1

1

这似乎过于复杂。在 r.js 构建中有一个 onBuildRead 选项,您可以在其中修改源代码,以便优化器可以接受。您也可以查看内部 API: onResourceLoad。您可以在其中捕获所有加载的依赖项,然后调用进行自定义构建。

要加载您的页面,您必须使用PhantomJS,以便它充当浏览器并执行 JS。然后信号节点为该页面生成自定义构建。但随后需要在该页面上切换资源以使用自定义构建。我想您可以使其可配置并在生产中执行此操作。

听起来确实可以,不确定是否可行。

于 2013-06-04T22:24:58.353 回答