如何创建一个结构化为AMD模块的可重用库?

时间:2012-07-11 17:26:09

标签: javascript requirejs js-amd

我们正在创建一个我们打算在多个项目中使用的框架。所有项目都将使用require.js来管理模块和依赖项。

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

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

但这种方法似乎存在两个问题。

  1. 根据framework/util/a不会告诉require.js需要加载framework.jsutil/a
  2. 优化工具为framework.js中包含的所有模块生成名称,例如define("util/a", function() { ... } );即使require.js已加载framework.js,也没有任何内容可以告诉它已定义的模块{{1} }是util/a的相对模块,因此被标识为framework
  3. 我是否遗漏了某些内容,或者是将我的框架构建为 CommonJS软件包并使用require.js的framework/util/a配置选项的更好方法?

1 个答案:

答案 0 :(得分:2)

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

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

免责声明:我没有使用过require.js,尽管这是我的最大努力:)