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