jQuery在Seajs下的改造
总感觉用上模块化,js代码才显得高大上一点,可是目前还脱离不了jQuery的简洁简单,于是想着一起使用jQuery和Sea.js,但是改造了多次,在Sea.js下仍然征服不了jQuery,很是苦恼。 看网上说的有两种方法可以使jQuery在Sea.js中乖乖听话。
方法一的两种方式:
//方式一:
define(function(){
//原有jQuery代码
return jQuery.noConflict();
});
//方式二:这个会有点小问题,原因与文章下方参考内容的《seajs集成jquery的一个坑》相同
define(‘jQuery’, \[\], function(){
//原有jQuery代码
return jQuery.noConflict();
});
此方法的方式一确实有效,但是我不想对原有jQuery改动太大,而且还听说jQuery本身对模块话就有支持,所以不太想用这种方式。
方法二:
找到jQuery中的如下代码
if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
define( "jquery", \[\], function () { return jQuery; } );
}
修改为:
if ( typeof define === "function" ) {
define( "jquery", \[\], function () { return jQuery; } );
}
此方法没有成功,但是这个方法也不是错的,不成功的原因我也搜到了:seajs的路径和ID匹配的原则
最终方案:
我使用的使压缩版jquery.min.js,找到的代码使下面这一段:
"function"==typeof define&&define.amd&&define("jquery",\[\],function(){return n});
将其修改为:
"function"==typeof define&&define.cmd&&define(function(){return n});
修改内容:
- 删除了”jquery”,[] 原因请参考文章下方的《seajs集成jquery的一个坑》
- 将define.amd修改为define.cmd或者删除&&define.amd,甚至删除”function”==typeof define&&define.amd&&
参考内容:
seajs 2.3.0 添加jquery
seajs模块化jQuery与jQuery插件
seajs集成jquery的一个坑