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

How can one create a reusable library structured as AMD module(s)?

本文关键字:AMD 模块 一个 何创建 创建 结构化      更新时间:2023-09-26

我们正在创建一个框架,打算在多个项目中使用。所有项目都将使用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.js,它将在其中找到util/a
  2. 优化工具为framework.js中包括的所有模块(如define("util/a", function() { ... } );)生成名称即使require.js加载了framework.js,也不会"告诉"它定义的模块util/aframework的相对模块,因此被标识为framework/util/a

我是遗漏了什么,还是有更好的方法将我的框架构建为CommonJS包并使用require.js的packages配置选项?

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