js模块化方案
Posted zhao.bo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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=url; document.head.appendChild(js); } } function require(name){return Modules[name]} function exports(obj){ var name=this.name; this.exports=obj; if(name in Modules){ for(var key in obj){ Modules[name]=obj[key]; } }else{ Modules[name]=obj; } this.trigger(CENTER,"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模块化方案的主要内容,如果未能解决你的问题,请参考以下文章
如何使用模块化代码片段中的LeakCanary检测内存泄漏?