7

多くのコードを含む jQuery プラグインを作成しています。したがって、コードを分離し、私 (開発者) にとってよりモジュール化することにしました。これには、require.js を使用します。
今私は6つのjsファイルを持っています:

  1. ユーティリティ.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つのファイルすべてを含む1つの大きなjsファイルを作成したいと思います(ユーザーが参照する必要があるjQueryを除く)。このために、r.js ( http://requirejs.org/docs/optimization.html ) を使用しました。その結果、require.js に依存する 1 つの大きな js ファイルを取得しました (また、define と require の呼び出しが含まれています)。私はこれに従いました:http://requirejs.org/docs/faq-optimization.html#wrap、almond.jsを使用して、require.jsに依存しない使用のためにすべてのファイルを結合しました。これはうまくいきます。
問題は、すべての define メソッド呼び出しと require メソッド呼び出し、および almond.js が必要な理由です。オプティマイザーが関数の結果のみを連結できなかったのはなぜですか (この質問で説明されているように:連結された RequireJS AMD モジュールにローダーが必要なのはなぜですか?) このような:

(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);
})();

このプロセスの結果、すべてのファイルをチェックアウトし、すべてのファイルを手動で 1 つの縮小ファイルに結合することにしました。最終的には、アーモンド バージョンよりも 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 に答える