【问题标题】:requirejs - combine several files to single js file that not dependent on requirejsrequirejs - 将多个文件组合成一个不依赖于 requirejs 的 js 文件
【发布时间】:2013-03-21 10:34:16
【问题描述】:

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

  1. utils.js
  2. base-row.jas
  3. a-row.js
  4. b-row.js
  5. my-table.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 文件是唯一的消费者。你怎么看?

【问题讨论】:

    标签: javascript jquery requirejs require minify


    【解决方案1】:

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

    $.getScript("my_lovely_script.js", function(){
    
       //whatever you want here.
    
    });
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2014-10-29
        • 2021-12-03
        • 2013-05-06
        • 2017-11-16
        • 2013-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多