1

私はr.jsにいくつかの問題を抱えています.誰かが光を当ててくれることを願っています.

次のシムを検討してください。

shim: {
    plugin: ['jquery'],
    plugin2: ['jquery', 'plugin']
}

次の任意のプラグイン (注: jQuery プラグインである必要はありませんが、2 つは 1 に依存する必要があります)。

プラグイン 1:

(function ($) {
    $.test = function () {
        console.log('from plugin 1');
    }
})(jQuery);

プラグイン 2:

(function ($) {
    $.test();
})(jQuery);

r.js は以下をビルドします。

(function ($) {
    $.test = function () {
        console.log('from plugin 1');
    }
})(jQuery);
define("plugin", function(){});

(function ($) {
    $.test();
})(jQuery);
define("plugin2", function(){});

これは素晴らしいことです - すべてが正しい順序になっています。

ただし、設定する必要がある場合

wrapShim: true

ビルド構成では、これを出力として取得します。

(function(root) {
    define("plugin", [], function() {
        return (function() {
            (function ($) {
                $.test = function () {
                    console.log('from plugin 1');
                }
            })(jQuery);
        }).apply(root, arguments);
    });
}(this));

(function(root) {
    define("plugin2", [], function() {
        return (function() {
            (function ($) {
                $.test();
            })(jQuery);
        }).apply(root, arguments);
    });
}(this));

wrapShim を true に設定するポイントを誤解しているかどうかはわかりませんが、これは次のようにコンパイルされるべきではありません。

define("plugin", ["jquery"], function() ...

define("plugin2", ["jquery", "plugin"], function() ...

?

wrapShim は、シムに設定された依存関係を完全に無視しているようです。

4

2 に答える 2

0

この投稿を書いている間にさらに調査すると、依存関係が次の長い形式でリストされている場合に表示されます。

shim: {
    plugin: {
        deps: ['jquery']
    },
    plugin2: {
        deps: ['jquery', 'plugin']
    }
}

その後、依存関係が正しく注入されます。

于 2015-05-18T22:46:00.440 に答える