- Notifications
You must be signed in to change notification settings - Fork8
WebModule.js
uupaa edited this pageOct 11, 2016 ·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();// same</script>
WebModule version 0.7.3 時点の 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/EnvironmentDetection(function(){varhasGlobal=!!GLOBAL.global;// Node.js, NW.js, ElectronvarprocessType=!!(GLOBAL.process||0).type;// Electron(render and main)varnativeTimer=!!/native/.test(setTimeout);// Node.js, Electron(main)GLOBAL.IN_BROWSER=!hasGlobal&&"document"inGLOBAL;// Browser and WorkerGLOBAL.IN_WORKER=!hasGlobal&&"WorkerLocation"inGLOBAL;// WorkerGLOBAL.IN_NODE=hasGlobal&&!processType&&!nativeTimer;// Node.jsGLOBAL.IN_NW=hasGlobal&&!processType&&nativeTimer;// NW.jsGLOBAL.IN_EL=hasGlobal&&processType;// Electron(render and main)})();// --- validation and assertion functions ------------------//{@dev https://github.com/uupaa/WebModule/wiki/ValidateGLOBAL.$type=function(v,types){returnGLOBAL.Valid ?GLOBAL.Valid.type(v,types) :true;};GLOBAL.$keys=function(o,keys){returnGLOBAL.Valid ?GLOBAL.Valid.keys(o,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;};GLOBAL.$values=function(o,vals){returnGLOBAL.Valid ?GLOBAL.Valid.values(o,vals) :true;};//}@dev// --- WebModule -------------------------------------------GLOBAL.WebModule={CODE:{},// source code container.VERIFY:false,// verify mode flag.VERBOSE:false,// verbose mode flag.PUBLISH:false,// publish flag, module publish to global namespace.exports:function(moduleName,//@arg ModuleNameStringmoduleClosure){//@arg JavaScriptCodeString//@ret ModuleObjectvarwm=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,wm,wm.VERIFY,wm.VERBOSE);// evaluate the module entity.wm.CODE[alias]=moduleClosure+"";// store to the container.if(wm.PUBLISH&&!GLOBAL[alias]){GLOBAL[alias]=wm[alias];// module publish to global namespace.}}returnwm[alias];}};