2012-07-11 36 views
5

我们正在创建一个我们打算在多个项目中使用的框架。所有项目都将使用require.js来管理模块和依赖项。如何创建一个可重用的库作为AMD模块构建?

理想情况下,我想使用r.js优化程序将编译为单个文件,该文件可以提供给使用它的应用程序。这个文件将包含框架的所有模块,使得在我的应用程序可以编写如下代码:

define(["framework/util/a", "framework/views/b"], function(A, B) { 
    var a = new A(); 
    // etc... 
}); 

但现在看来,有两个问题的办法。

  1. 根据framework/util/a没有告诉它需要加载framework.js require.js将在其中找到util/a
  2. 的优化工具生成包含在framework.jsdefine("util/a", function() { ... });即使require.js所有模块的名称加载framework.js没有什么可以告诉它定义模块util/a是一个相对的模块frameworkframework/util/a

我失去了SOMET这样被确定兴或是更好的方法来构建我的框架作为一个CommonJS包并使用require.js的packages配置选项?

+0

我不认为这是一种合理的方式来做到这一点。从@jrburke:“只是”以源代码的形式将模块分发到目录中,而不是构建。“ – rharper 2012-11-12 14:12:20

回答

2

回复:1.似乎确实r.js优化不是用来优化部分依赖树,因为懒加载取决于文件路径。例如。要求path/to/module实际加载path/to看起来像一个黑客。一种解决方案是放弃延迟加载,并在应用程序代码上方包含framework-built.js

回复:2.所以你现在需要你的framework-built.js完整路径。一种方法是建立一个虚拟父母,需要所有的framework,比如dummy-framework.js。这样你的dummy-framework-built.js将有framework定义完整的路径,如果不是延迟加载,它应该工作正常。

免责声明:我没有require.js使用所有的东西,虽然这是我最大的努力:)

+0

感谢您的努力。你的方法使我能够达到我想要的最接近的水平 - 绝对值得投票赞成。但是,与jrburke的快速对话告诉我,我可能根本不想编译这个库,而只是分发整个源文件夹。 – rharper 2012-11-12 14:10:26

+0

我也和詹姆斯聊过,自从我发布这篇文章以来,也学到了更多。请参阅http://stackoverflow.com/questions/12302440/requirejs-is-there-a-way-to-achieve-multiple-base-urls我在哪里回答我自己的问题。所以我通过使用自定义的“路径”来实现一个“框架”应用程序来进行实时延迟加载,而在本地生产中,我通过将这些相同的路径指向本地“框架”(这只是一个兄弟文件夹)来构建。 – jpillora 2012-11-13 02:02:33