requirejs - 将多个文件组合到不依赖于requirejs的单个js文件

时间:2013-03-31 00:25:00

标签: javascript jquery requirejs require minify

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

  1. utils.js
  2. 基row.jas
  3. 一个-row.js
  4. B-row.js
  5. MY-table.js
  6. main.js
  7. 文件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文件(包含对define和require的调用)。我遵循这个: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文件是唯一的消费者。你觉得怎么样?

1 个答案:

答案 0 :(得分:-1)

您可以只包含文件中所需的文件。您可以使用getScript调用来执行此操作。

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

   //whatever you want here.

});