私は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 は、シムに設定された依存関係を完全に無視しているようです。