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

rha*_*per 5 javascript requirejs js-amd

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

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

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

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

  1. 取决于framework/util/a不告诉require.js它需要加载framework.js它将找到它util/a
  2. 优化工具为包含的所有模块生成名称,framework.js例如,define("util/a", function() { ... } ); 即使加载了require.js framework.js,也没有任何内容告诉它定义的模块util/a是相对模块,framework因此被标识为framework/util/a

我是否遗漏了一些东西,或者是一种更好的方法来构建我的框架作为CommonJS包并使用require.js的packages配置选项?

jpi*_*ora 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,尽管这是我最大的努力:)