这篇其实算是补充上一篇。
事记:
昨天一同事(之前没用过seajs)突然要用seajs,我无意间听到,加上我最近又在研究它,便“自不量力”地跑上去跃跃欲试。
看到他已经敲出来的那些看似有点像的seajs代码,跟我之前的用法不尽相同,我就犯迷糊了。然后回来又自行研究了一下,才大概搞明白了怎么回事,也算帮同事搞定了seajs的引进。
下面进入正题:
我之前的用法是
html:
1 <script type="text/javascript" src="xx/js/sea.js" id="seajsnode" data-main="mymod"></script>//data-main指定入口文件
mymod.js
1 define(function (require) { 2 //require('xxx')//引入别的模块 3 //业务代码 4 }
基本没有使用seajs.use方法
今天总结了一下seajs.use的使用
首先:页面上还是引入seajs
1 <script type="text/javascript" src="xx/js/sea.js" id="seajsnode" ></script>
然后下面紧跟着调用seajs.use
1 <script> 2 seajs.use([ 'seajs/jquery','seajs/tagcloud', 'seajs/imgAlter'], function ($, b, c) { 3 var v = $.browser.version; 4 //debugger; 5 }); 6 </script>
第一个参数,即那个数组,是依赖的模块,各个模块的输出接口按顺序跟后面的callback形参一一对应。
依赖模块加载完毕后,执行callback。
其实上面的内容很多教程里都有。
但这里不得不提的是,如果这里的依赖模块里如果指定了id,比如
define('gallery/jquery/1.7.2/jquery',[],function (require) { //jquery code }
而这个id跟模块路径又不一致,会导致无法获取输出接口。
经浏览器查看,引用依赖的jquery的路径是正确的,并且也的确加载到jquery模块了,但输出接口始终为null。
后来google到,开发阶段不推荐define的参数传入三个,只需给定后面的factory即可,发布时通过构建工具提取压缩模块,会自动加上idhe依赖数组(即第二个参数),这样seajs能够更快的定位本身这个模块和它依赖的模块。
顺便提一下,第二个参数,如果显示传入了,那么seajs就不会再通过正则去扫描factory.toString(),直接根据这个参数去加载依赖模块,如果为[]即表示无依赖。