我目前正在尝试使用 r.js 优化当前的 jQuery(开发版本 1.8.1)。这发生在使用 gem requirejs-rails 在 Rails 项目中进行资产编译期间。
我想我在优化器中遇到了一个错误。在 jquery 源代码的第 999 行附近,您会发现以下代码:
(function add(args) {
jQuery.each(args, function (_, arg) {
var type = jQuery.type(arg);
if (type === "function" && (!options.unique || !self.has(arg))) {
list.push(arg);
} else if (arg && arg.length && type !== "string") {
// Inspect recursively
add(arg);
}
});
})(arguments);
当优化的 jquery 到达包含add(arg);
错误的行时,将抛出add
未定义的错误。这是因为优化器将函数重命名add
为e
,而函数调用仍然add(...)
像这样:
(function e(args) {
jQuery.each(args, function (_, arg) {
var type = jQuery.type(arg);
if (type === "function" && (!options.unique || !self.has(arg))) {
list.push(arg);
} else if (arg && arg.length && type !== "string") {
// Inspect recursively
add(arg);
}
});
})(arguments);
我能够通过将代码重写为:
var fnAdd = function (args) {
jQuery.each(args, function (_, arg) {
var type = jQuery.type(arg);
if (type === "function" && (!options.unique || !self.has(arg))) {
list.push(arg);
} else if (arg && arg.length && type !== "string") {
// Inspect recursively
console.log("inspecting", fnAdd);
fnAdd(arg);
}
});
};
fnAdd(arguments);
这可以被认为是 r.js 中的错误吗?还是不允许使用javascript?我想知道为什么我是第一个遇到问题的人(至少谷歌没有透露任何解决方案)。