requirejs - 将多个文件组合成一个不依赖于 requirejs 的 js 文件

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案1】:

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

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

   //whatever you want here.

);

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于requirejs - 将多个文件组合成一个不依赖于 requirejs 的 js 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何将多个PNG组合成一个大的PNG文件?

如何使用 webpack 将多个节点 js 文件组合成一个包

RequireJS 模块的定义与加载

将多个数据文件组合成 np.arrays,存储在字典中

Requirejs输出到单个文件,不包括jQuery不保留依赖?

将多个目标组合成一个目标