-
Notifications
You must be signed in to change notification settings - Fork 8
WebModule.js
uupaa edited this page Oct 23, 2015
·
23 revisions
このエントリでは WebModule.js について説明します。
最初に WebModule.js を読み込み、その後に WebModule製のモジュール(例: MyExample.js)を読み込みます。
<script src="../lib/WebModule.js"></script>
<script>
//publish to global. eg: window.WebModule.Class -> window.Class
//WebModule.publish = true;
</script>
<script src="../lib/MyExample.js"></script>
<script>
var myExample = new WebModule.MyExample();
</script>
モジュールを GLOBAL 空間以下に直接公開することもできます。
モジュールを読み込む前に、WebModule.publish = true;
を設定しておくと、
通常 new WebModule.MyExample()
のように記述すべきところを、
new MyExample()
と、より短く記述できるようになります。
<script src="../lib/WebModule.js"></script>
<script>
WebModule.publish = true;
</script>
<script src="../lib/MyExample.js"></script>
<script>
var myExample = new WebModule.MyExample();
var myExample = new MyExample(); // published
</script>
WebModule version 0.5.33 時点の WebModule.js はこのようになっています。
GLOBAL は ブラウザ上では window と等価です。
Namespaceを参照してください。
// http://git.io/WebModule
// --- global variables ------------------------------------
// https://github.com/uupaa/WebModule/wiki/WebModuleIdiom
var GLOBAL = (this || 0).self || global;
// --- environment detection -------------------------------
// https://github.com/uupaa/WebModule/wiki/EnvironmentDetection
GLOBAL.IN_EL = !/undefined/.test(typeof __dirname + typeof __filename);
GLOBAL.IN_BROWSER = !GLOBAL.IN_EL && !GLOBAL.global && "document" in GLOBAL;
GLOBAL.IN_WORKER = !GLOBAL.IN_EL && !GLOBAL.global && "WorkerLocation" in GLOBAL;
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/Validate
GLOBAL.$type = function(v, types) { return GLOBAL.Valid ? GLOBAL.Valid.type(v, types) : true; };
GLOBAL.$keys = function(v, keys) { return GLOBAL.Valid ? GLOBAL.Valid.keys(v, keys) : true; };
GLOBAL.$some = function(v, cd, ig) { return GLOBAL.Valid ? GLOBAL.Valid.some(v, cd, ig) : true; };
GLOBAL.$args = function(api, args) { return GLOBAL.Valid ? GLOBAL.Valid.args(api, args) : true; };
GLOBAL.$valid = function(v, api, hl) { return GLOBAL.Valid ? GLOBAL.Valid(v, api, hl) : true; };
//}@dev
// --- WebModule -------------------------------------------
GLOBAL.WebModule = {
publish: false, // WebModule based modules publish to global.
closure: {}, // module script stocker
exports: function(moduleName, moduleClosure) {
var wm = this; // GLOBAL.WebModule
// https://github.com/uupaa/WebModule/wiki/SwitchModulePattern
var alias = wm[moduleName] ? (moduleName + "_") : moduleName;
if (!wm[alias]) { // secondary module already exported -> skip
wm[alias] = moduleClosure(GLOBAL); // evaluate the module entity
wm.closure[alias] = moduleClosure + ""; // stock
if (wm.publish && !GLOBAL[alias]) {
GLOBAL[alias] = wm[alias]; // publish to global
}
}
return wm[alias];
}
};