- Notifications
You must be signed in to change notification settings - Fork8
WebModule.js
uupaa edited this pageOct 24, 2015 ·23 revisions
このエントリでは WebModule.js について説明します。
最初に WebModule.js を読み込み、その後に WebModule製のモジュール(例: MyExample.js)を読み込みます。
<scriptsrc="../../lib/WebModule.js"></script><script>//publish to global. eg: window.WebModule.Class -> window.Class//WebModule.publish = true;</script><scriptsrc="../../lib/MyExample.js"></script><script>varmyExample=newWebModule.MyExample();</script>
モジュールを GLOBAL 空間以下に直接公開することもできます。
モジュールを読み込む前に、WebModule.publish = true;
を設定しておくと、
通常new WebModule.MyExample()
のように記述すべきところを、new MyExample()
と、より短く記述できるようになります。
<scriptsrc="../../lib/WebModule.js"></script><script>WebModule.publish=true;</script><scriptsrc="../../lib/MyExample.js"></script><script>varmyExample=newWebModule.MyExample();varmyExample=newMyExample();// published</script>
WebModule version 0.5.33 時点の WebModule.js はこのようになっています。
GLOBAL は ブラウザ上では window と等価です。
Namespaceを参照してください。
// http://git.io/WebModule// --- global variables ------------------------------------// https://github.com/uupaa/WebModule/wiki/WebModuleIdiomvarGLOBAL=(this||0).self||global;// --- environment detection -------------------------------// https://github.com/uupaa/WebModule/wiki/EnvironmentDetectionGLOBAL.IN_EL=!/undefined/.test(typeof__dirname+typeof__filename);// ElectronGLOBAL.IN_BROWSER=!GLOBAL.IN_EL&&!GLOBAL.global&&"document"inGLOBAL;GLOBAL.IN_WORKER=!GLOBAL.IN_EL&&!GLOBAL.global&&"WorkerLocation"inGLOBAL;GLOBAL.IN_NODE=!GLOBAL.IN_EL&&!!GLOBAL.global&&!/native/.test(setTimeout);GLOBAL.IN_NW=!GLOBAL.IN_EL&&!!GLOBAL.global&&/native/.test(setTimeout);// --- validate and assert functions -----------------------//{@dev https://github.com/uupaa/WebModule/wiki/ValidateGLOBAL.$type=function(v,types){returnGLOBAL.Valid ?GLOBAL.Valid.type(v,types) :true;};GLOBAL.$keys=function(v,keys){returnGLOBAL.Valid ?GLOBAL.Valid.keys(v,keys) :true;};GLOBAL.$some=function(v,cd,ig){returnGLOBAL.Valid ?GLOBAL.Valid.some(v,cd,ig) :true;};GLOBAL.$args=function(api,args){returnGLOBAL.Valid ?GLOBAL.Valid.args(api,args) :true;};GLOBAL.$valid=function(v,api,hl){returnGLOBAL.Valid ?GLOBAL.Valid(v,api,hl) :true;};//}@dev// --- WebModule -------------------------------------------GLOBAL.WebModule={publish:false,// WebModule based modules publish to global.closure:{},// module script stockerexports:function(moduleName,moduleClosure){varwm=this;// GLOBAL.WebModule// https://github.com/uupaa/WebModule/wiki/SwitchModulePatternvaralias=wm[moduleName] ?(moduleName+"_") :moduleName;if(!wm[alias]){// secondary module already exported -> skipwm[alias]=moduleClosure(GLOBAL);// evaluate the module entitywm.closure[alias]=moduleClosure+"";// stockif(wm.publish&&!GLOBAL[alias]){GLOBAL[alias]=wm[alias];// publish to global}}returnwm[alias];}};