为什么要前端模块化开发?
代码越来越多时或多人开发的时候,会产生冲突,依赖的问题。
冲突:一般命名冲突时,我们都会使用命名空间,而且命名空间有时候可能名字比较长,调用命名空间下的函数起来不方便,而且这种方法是无法完全避免冲突
依赖:当一个js文件依赖另一个js文件的时候,如果仅仅是一个依赖倒没有什么问题,但是如果后期里,功能修改,发现又要依赖其他js,那就比较难以维护
通过seaJS,引用不同的模块,提供相应的接口,可以避免冲突
比如说有一个模块m1,通过define把普通模块变成sea下面的模块
define(function(require,exports,module){
exports.sayHi=function(){
alert('hi');
}
});
//sea下面的参数名字是默认的,不允许修改的
//exports是对外提供接口的对象
然后再调用此模块
seajs.use('./js/m1.js',function(ex){
ex.sayHi();
});
//通过seajs.use()引入模块,注意,无论在哪里调用这个函数,默认的根目录是sea.js这个文件
//回调函数可接收一个任意命名的参数,这个参数代表exports对象
由于不同的模块都有自己的接口,通过调用不同的模块,就可以杜绝冲突的问题
接下来说一下模块与模块之间怎实现依赖
假如模块m2依赖模块m1,如m2必须引用m1中的变量"name",可使用require,require是模块之间依赖的接口
m1代码如下
define(function(require,exports,module){
var name="XJM";
exports.name=name;
});
m2代码如下
define(function(require,exports,module){
//注意,这里require调用后返回的就是m1模块的export接口
var name=require('./module1.js').name;
exports.sayName=function(){
alert(name);
}
});