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的一个坑

posted @ 2016-01-05 23:39  六楼的雨  阅读(15)  评论(0编辑  收藏  举报