seajs集成jquery的一个坑

var $ = require("jquery"); 

今天在用seajs集成js的时候,总是发现$获取不到,可是文件又加载进去了,后来找了半天发现是这个问题。jquery

本质的缘由在于seajs有一个路径和ID匹配的原则
git

seajs的设计思想是,路径即ID。通常在调用define()方法时,若是只传递一个factory function,那么这个模块就是个匿名模块;或者传递define(module_id, dependency, factory),这个模块就是个具名模块
 
若是一个文件就是一个模块,那么匿名模块就能够了。可是在生产环境中,每每会把多个模块放到一个文件里,可是路径只有一个,如何知道要加载哪一个模块呢?这时候就须要给其中一个模块赋予module_id,和path保持一致,seajs就知道应该加载这个ID和path匹配的模块了
 
若是具名模块的id和require的path参数不匹配,就会返回null,这就是我出现这个错误的缘由:
在jquery底部的代码有这样一行
define("jquery/jquery/1.10.1/jquery-debug", [], function () { return jQuery; } );// module_id是"jquery/jquery/1.10.1/jquery-debug" 

这个id和require的时候path不一样,致使这个现象。解决方法很简单github

define(function(){return jQuery});  

把定义的id和依赖所有删了就好了。ui

相关文章
相关标签/搜索