【前言】
最近接触 seajs ,遇到了下面问题:
var $ = require('jquery'); // error:$为null
【找原因】
1. 调试了一下,发现jquery的路径没有问题,但是$却是null,初步判断require()这个函数没有理解清楚。
2. 百度了一下,发现是seajs中 require() 的参数一定要是遵循cmd规范的文件, 而jquery正常都是没有模块化的。
3.回到了我们今天的重点:如何模块化jquery?
【解决过程】
1. 参照一些博客文章模块化jquery,但是还有一些问题。(文章中的seajs和jquery版本都是以前的,所以可能有些差异)
2. 尝试了很多种方法,最后成功了2种方法:模块化jquery。
3. 方法介绍:
版本:seajs.2.3.0.js; jquery-2.2.0.js
【方法一】
在jquery源码末尾中,修改成如下:
if ( typeof define === "function") {
define(function() {
return jQuery;
} );
}
说明:1. if()中只有一个判断了 2. define()中只有一个参数,前面还有两个参数容易出错,官网例子也推荐用一个工厂函数就可以了。
【方法二】
在jquery源码外加如下代码:
define(function(){
//jquery code
// ...
return $.noConflict(true);
});
</pre><pre name="code" class="html">
【结束语】
经过测试,以上两种方法都能够在seajs中正常加载jquery,两种方法的最终目的都是为了模块化jquery,暴露出一个对象给外面调用。查看了网上很多资料,经过整理后这两种方法在当前版本可用。
ps:刚入前端,请多多指教。
参考文章:
http://blog.csdn.net/it_man/article/details/7782623 //seajs使用指南
http://blog.csdn.net/uikoo9/article/details/37995129 //seajs添加jquery,其中一种实现方式
http://blog.csdn.net/lfsf802/article/details/26758305 //seajs模块编写