首页 > 代码库 > js模块化方案【转】
js模块化方案【转】
(function(){ var CENTER = new EvtCenter(); var Loaded={}; var Modules={}; function loadScript(name,url){ if(!(name in Loaded)){ Loaded[name]=!0; var js=document.createElement("script"); js.src=http://www.mamicode.com/url;"load"); } function Module(name,factory){ var self = this; if(!(self instanceof Module)) return new Module(name,factory); if(factory===undefined){factory=name;name=factory.name} self.name = name||"anonymous"; self.factory=factory; self.inited=false; Loaded[self.name]=!0; self.process(); if(self.depends){ self.on(CENTER,"load",function(e){ if((!self.inited)&&(self.depends[e.sender.name])){ self.check()&&self.init(); } }); }else{ setTimeout(function(){ self.init(); },0) } } Eventable(Module); Module.prototype.init=function(){ this.inited=true; this.factory(require.bind(this),exports.bind(this)); if(!/exports\(/.test(this.txt)){ Modules[this.name]=null; this.trigger(CENTER,"load"); } delete this.txt; } Module.prototype.check=function(){ var k,flag=true; for(k in this.depends){ if(!(k in Modules)){ flag=false; break; } } return flag; } Module.prototype.process=function(){ var txt,url,name,i,list,tmp,reg = /require\(([^\)]+)\)/; this.txt=this.factory.toString(); list=this.txt.split(/\r?\n/); for(i=0,l=list.length;i<l;i++){ txt=list[i]; if(reg.test(txt)){ tmp = reg.exec(txt)[1].replace(/^\s*|\s*$/g,‘‘).split(/\s*,\s*/); url = tmp[1]&&(tmp[1].replace(/‘|"/g,‘‘)); name= tmp[0].replace(/‘|"/g,‘‘); if(url&&!/\.js$/.test(url))url=url+‘.js‘; if(!(name in Loaded) && url) setTimeout(function(){loadScript(name,url)},0); if(!this.depends) this.depends={}; this.depends[name]=!0; } } } window.Module=Module; })();//module
使用简单的依赖预处理(无法辨别是否在注释或者字符串中)
转载自:http://www.cnblogs.com/ss0102113/p/6114485.html
js模块化方案【转】
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。