我正在编写包含大量代码的 jQuery 插件。因此,我决定分离代码并使其对我(开发人员)更加模块化。为此,我使用 require.js。
现在我有 6 个 js 文件:
- 实用程序.js
- 基本行.jas
- a-row.js
- b-row.js
- 我的表.js
- main.js
文件 1 到 5 定义了 JavaScript“类”,它们之间有依赖关系。操作所有音乐会的“主要”类是 my-table.js。main.js 仅依赖于 my-table.js 并从中创建一个插件:
require([
'my-table'
], function(MyTable) {
jQuery.fn.myTable = function(options) {
var table = new MyTable(this, options);
this.data('myTable', table);
return this;
};
});
现在我想从这些文件中创建一个包含所有 6 个文件的大 js 文件,没有任何依赖关系(用户应该引用它的 jQuery 除外)。为此,我使用了 r.js ( http://requirejs.org/docs/optimization.html ),结果我得到了一个依赖于 require.js 的大 js 文件(并且包含定义和要求的调用)。我遵循了这个:http: //requirejs.org/docs/faq-optimization.html#wrap 并使用 almond.js 来组合我的所有文件以供不依赖于 require.js 的使用。这工作正常。
问题是为什么我需要所有的 define 和 require 方法调用和 almond.js?为什么优化器不能只连接函数结果(如本问题所述:Why do concatenated RequireJS AMD modules need a loader?) 像这样:
(function() {
var utils = «function() {
....
return Utils;
}»();
var baseRow = «function(A) {
....
return BaseRow;
}»(utils);
....
....
var myTable = .....
//<--This is require call and therefore doesn't return a thing
(function(MyTable) {
jQuery.fn.myTable = function(options) {
var table = new MyTable(this, options);
this.data('myTable', table);
return this;
};
})(myTable);
})();
作为这个过程的结果,我决定检查并手动将所有文件合并到一个缩小文件中。我最终得到一个比杏仁版本小 3k 的文件!
我没有找到 r.js 优化器创建 require.js 依赖结果背后的逻辑。就我而言,没有人需要使用任何文件,我的主 js 文件是唯一的消费者。你怎么看?