这可能很简单,但我必须说我对这个话题感到有些困惑。
我正在编写基于两个流行库的代码:
我只是想知道隔离代码并防止冲突以及如何将其与依赖项合并的最佳方法是什么?
通过合并,我的意思是将它们放在同一个文件中。
答案 0 :(得分:1)
您可以轻松地将其中两个放在同一个文件中,因为它们转变为全局的唯一内容是window._
,window.$
和window.jQuery
。其他变量和函数包含在本地范围内,因此不存在冲突。
编辑:您自己的代码也可以放在同一个文件中。如果你更喜欢删除全局变量,jQuery和Underscore都有一个无冲突的方法,它用它们的旧值(通常为undefined
)替换全局变量。您可以将代码包装在您自己的本地范围内,并且不再存在任何问题:
// jQuery and Underscore source here
// You code here, wrapped in a self-executing function:
(function($, _){
// here you can add your code:
$('#test').text('jQuery works');
_(3).times(function(){
alert('Underscore works' );
});
})(jQuery.noConflict(true), _.noConflict());
// no jQuery nor Underscore here:
alert(typeof jQuery, typeof $, typeof _);
这看起来很棘手,但让我快速解释一下。您可以在定义函数后立即执行函数,如下所示:
(function(){
alert('I am being executed');
})(); // <-- basically how you call a function normally: func();
你可以传递参数:
(function(a){
alert(a);
})('test');
$.noConflict()
和_.noConflict()
都删除全局变量并返回对jQuery和Underscore变量的引用。所以你可以在自动执行函数中传递这些作为参数,并且每个人都很开心(: