有条理地将javascript文件组合为预编译步骤(比r.js更灵活)

时间:2013-06-04 19:18:30

标签: javascript requirejs r.js

我正在开发一个javascript模块化框架,我正在寻找一种方法来自动优化/组合一组javascripts作为预编译步骤。

我已经在使用grunt了,所以一个笨蛋任务可能会有意义。

框架由他们自己的文件中的模块组成(如我们都习惯的矩形'小部件'),反过来可能需要其他javascripts。

所有这些都是使用Require.js进行连接,效果很好。 但是,在尝试使用require.js附带的 r.js 时,我遇到了以下约束

  

优化器只会组合数组中指定的模块   传递给顶级需求和定义的字符串文字   调用,或require('name')字符串文字调用的简化   CommonJS包装。因此,它不会找到通过a加载的模块   变量名称:

事情是:模块可以互相继承,甚至可以通过配置组合其他模块(技术需要加载引用的模块,这些模块位于自己的js文件中)。

这不适用于上面提到的约束。 我确信我可以用足够的时间自己做饭,但也许有人已经做过这样的事情了。 (r.js但更灵活)。

一个可行的解决方案imho将:

  • 让precompile-task运行js需要优化一次的页面(但是在Node中的服务器而不是客户端上,框架能够执行此操作)
  • 并以某种方式跟踪require.js
  • 中加载的所有库
  • 以某种方式读出了require.js,并且有你要加载的js脚本列表。
  • 通过它提供的include将其交给r.js,r.js从那里处理它。
  • btw有更多的网页类型。但是在r.js中似乎可以定义公共库,因此它们不会包含在每页优化文件中。

这听起来有道理吗?有人试过这样的事吗?

1 个答案:

答案 0 :(得分:1)

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

要加载页面,您必须使用PhantomJS,以便它充当浏览器并执行JS。然后发信号节点为该页面生成自定义构建。但是,然后需要切换该页面上的资源以使用自定义构建。我想你可以让它可以配置,并在生产时这样做。

听起来确实有可能,不确定它是否可行。