seajs是一个功能强大、使用简单的js包管理器,有了它,就可以方便快捷的实现js的模块化编程
下面简单介绍seajs的使用方法
比如有index.html,加入如下代码即可引入seajs及相关的配置:
<script src="assets/js/sea.js"></script> <script> seajs.config({ alias: { // 指定使用的 jQuery 版本 注意:这里的jauery是经过seajs包装的 'jquery': 'jquery-1.8.0' } }) // 加载入口模块,main.js seajs.use('./assets/js/main') </script> |
在main.js内:
define(function(require){ var SS = require('./ss'); var s = new SS(); s.fun1(); //"fun1" }); |
上面通过require引入了一个叫做ss的模块,如下:ss.js
define(function(require, exports, module){ //引入jquery模块 var $ = require('jquery'); //对外输入SS类 module.exports = function(){ function SS(){ } SS.prototype = { fun1 : function(){ alert('fun1'); } }; return SS; }(); }); |
关于seajs的简单使用,上面就讲完了,最后在说一个小细节:通过require(‘xxx’)引入的对象是“单例”的,比如下面s2.js
define(function(require, exports, module){ module.exports = function(){ function SS(){ this.s = 1; } SS.prototype = { fun1 : function(){ alert(this.s); } }; //返回实例化后的SS return new SS(); }(); }); |
再这样调用s2
var t1 = require('./s2'); t1.s = 3; var t2 = require('./s2'); t2.fun1(); //这是,会alert 3 |
看到了吧,s2本来有一个属性s=1,再第一次引用t1内,被设置为3,再次通过require引用s2到t2,此时t2的s属性也变成了3,也就是说在seajs内有一个“require”的对象库,每一个通过module.exports输出的对象都会被保存在里面,再次require时,返回到仍然是原对象
————-
关于seajs更多内容,请参考:https://github.com/seajs/seajs/issues/266