一个SeaJs集成jQuery方案

先引用一句话:

首先声明这是个万人坑,不要怨恨苦恼,不要垂头丧气,一定要相信希望就在前方,未来一片光明!
https://github.com/seajs/seajs/issues/930

问题很简单,就是require('jquery')出现undefined的情况,刚接触SeaJs的我也喜闻乐见的遇到了这个问题,相信所有人应该都遇到过,至于如何解决网上也有很多解决方案了,就不多赘述了,比如这里: https://www.zhihu.com/question/21703739

打开jQuery源码会发现jQuery有对AMD规范的兼容代码:

1
2
3
4
5
if ( typeof define === "function" && define.amd ) {
define( "jquery", [], function() {
return jQuery;
});
}

既然SeaJs是CMD规范,并且SeaJs也提供了判定当前页面是否有 CMD 模块加载器的方法define.cmd,如下图:

那么结合起来将AMD兼容代码改为CMD兼容代码即可,所以首先找到jQuery当中的相关代码,将其改为SeaJs定义模块的方式即可:

1
2
3
4
5
if ( typeof define === "function" && define.cmd ) {
define(function() {
return jQuery;
});
}

同样的道理,不仅仅是jQuery,大部分框架都可以这样修改实现CMD规范的兼容。