星空网 > 软件开发 > Java

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='/images/loading.gif' data-original=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

使用简单的依赖预处理(无法辨别是否在注释或者字符串中)

事件采用上一篇文章中的Eventable

 




原标题:js模块化方案

关键词:JS

JS
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

亚马逊测试App弹窗功能,在对手产品页面推销自有品牌:https://www.ikjzd.com/articles/19192
亚马逊卖家补缴税款!美国加州要求?:https://www.ikjzd.com/articles/19196
中东电商平台SOUQ的基本知识大全!:https://www.ikjzd.com/articles/19197
亚马逊跟卖是什么?亚马逊卖家该怎么防止被跟卖?:https://www.ikjzd.com/articles/19198
一周要闻!亚马逊整顿VC事件只为打假?:https://www.ikjzd.com/articles/19199
国外坛友对2018年亚马逊的几点大胆预测:https://www.ikjzd.com/articles/192
字节跳动辟谣!TikTok收紧美国开店政策为不实信息:https://www.goluckyvip.com/news/188212.html
2024北京庞各庄镇梨花节开幕时间是几号?:https://www.vstour.cn/a/365179.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流