7

我正在编写包含大量代码的 jQuery 插件。因此,我决定分离代码并使其对我(开发人员)更加模块化。为此,我使用 require.js。
现在我有 6 个 js 文件:

  1. 实用程序.js
  2. 基本行.jas
  3. a-row.js
  4. b-row.js
  5. 我的表.js
  6. 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 文件是唯一的消费者。你怎么看?

4

2 回答 2

0

优化器中findNestedDependencies选项的默认值为“false”,这意味着即使在脚本优化之后,仍然可能存在需要模块加载器的嵌套require或调用。define外部依赖项也需要加载程序。

但是,我同意,如果 findNestedDependencies 设置为“true”并且项目中没有外部依赖项,那么优化器应该能够消除对加载器的需求。

于 2015-05-02T15:31:35.603 回答
-1

您可以只在文件中包含所需的文件。您可以通过 getScript 调用来做到这一点。

$.getScript("my_lovely_script.js", function(){

   //whatever you want here.

});
于 2015-06-21T00:23:47.520 回答