Doge log

Abby CTO 雑賀 力王のオフィシャルサイトです

Kumuでの依存解決方法 案2

あの手でやってみっかあ。
ちょーてきとーではあるが。
前回同様に。

depend.js

depend = {};
depend.add = function(x,y){
  		return x+y;
};

user.js

むにゃ。
てきとーにコメントに@importつける。

//
//import library sample
//

usr = {};
//@import depend
usr.add = depend.add;

Loader存在しない事に注目。
importはjavascript構文的にアウトですがコメントなので問題なし。

import.js

でimport.js

if (typeof(Kumu.Loader) == 'undefined') {
    Kumu.Loader = {};
};

Kumu.Loader = Kumu.extend(Kumu.Loader, {
    repository:['/teeda-example/js/'],
    
    addRepository : function(o){
        repository.push(o);
    },
    
    importLib : function(lib){
       var axo = new Array(
        "Microsoft.XMLHTTP",
        "Msxml2.XMLHTTP.4.0",
        "Msxml2.XMLHTTP.3.0",
        "Msxml2.XMLHTTP"
      );

	    var loadfile = function (filename){
	    	var xmlHttp = false;
	        /*@cc_on
    		@if (@_jscript_version >= 5)
    		for (var i = 0; !xmlHttp && i < axo.length; i++) {
        		try {
            		xmlHttp = new ActiveXObject(axo[i]);
        		} catch(e) {
        		}
    		}
   	 		@else
        		xmlHttp = false;
    		@end @*/
	    	if (!xmlHttp && typeof XMLHttpRequest != "undefined") {
            	try{
                	// for Firefox, safari
                	xmlHttp = new XMLHttpRequest();
                	//xmlHttp.overrideMimeType("text/xml");
            	} catch(e) {
                	xmlHttp = false;
            	}
        	}
        	
		    xmlHttp.open("GET", filename, false);
		    xmlHttp.send(null);
		    return xmlHttp.responseText;
	    };

	    if(lib){
	        var arry = this.repository;
	        for(var i = 0; i < arry.length; i++){
   		        var libpath = arry[i];
   		        var fullpath = libpath + lib.replace(/\./,"/") + ".js";
    		    var text = loadfile(fullpath);
    		    var result = text.match(/@import [a-z]+/);
    		    if(result){
    		    	for(var i = 0;i < result.length;i++){
    		        	var imports = result[i];
    		        	imports = imports.split(' ');
    		        	if(imports[1]){
							this.importLib(imports[1]);
    		        	}
    		    	}
    		    }
    		    eval(text);
    		}
	    }
     }
});

ゴリッと書いてるのはてきとーだから。
これで一応動きます。
正規表現で拾い上げてるだけなので細かい事はできませんがー。
真面目に構文解析すればもうちょっとなんかできるかも知れませんがそれよりもあの手で明示的に書いてもらう方が負荷が少なくなるんでないかなあと。
ニーズがあればもうちょっと凝った事もやりますよ。あればですが。

うくく。