需要 js 垫片和 r.js 的问题
Trouble with require js shims and r.js
我在使用 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 似乎完全忽略了 shim 中设置的依赖项。
在编写本文时进一步检查 post 似乎如果依赖项以较长的形式列出:
shim: {
plugin: {
deps: ['jquery']
},
plugin2: {
deps: ['jquery', 'plugin']
}
}
然后依赖项被正确注入。
这是一个错误,已在此处跟踪修复:
https://github.com/jrburke/r.js/issues/813
我在使用 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 似乎完全忽略了 shim 中设置的依赖项。
在编写本文时进一步检查 post 似乎如果依赖项以较长的形式列出:
shim: {
plugin: {
deps: ['jquery']
},
plugin2: {
deps: ['jquery', 'plugin']
}
}
然后依赖项被正确注入。
这是一个错误,已在此处跟踪修复: https://github.com/jrburke/r.js/issues/813