- Notifications
You must be signed in to change notification settings - Fork8
SwitchModulePattern
uupaa edited this pageOct 23, 2015 ·3 revisions
JavaScript の global 空間に同じ名前のモジュールを複数回ロードしてしまうと、名前の取り合い(上書き)が発生し、大変困った事になります。WebModule には、そのような名前空間の取り合いを回避し、モジュールを多重ロードする仕組み(SwitchModulePattern)があります。
以下のコードは、"MyExample" in GLOBAL
が true ならalias = "MyExample_";
を行い、false ならalias = "MyExample";
を行っています。
(functionmoduleExporter(moduleName,moduleClosure){// http://git.io/WebModulevaralias=moduleNameinGLOBAL ?(moduleName+"_") :moduleName;// switchvarentity=moduleClosure(GLOBAL);GLOBAL[alias]=entity;})("MyExample", ...){});
SwitchModulePattern には、以下の使いどころがあります。
後からロードしたモジュールが、既に動作しているモジュールを上書きせずにすみます
[A]
先に読み込んだモジュールは GLOBAL["MyExample"] = MyExample; としてロードします[B]
後から同じモジュールは、GLOBAL["MyExample_"] = MyExample; としてロードします。先にロードしたモジュールの動作を阻害しません
<scriptsrc="lib/MyExample.js"></script><!-- [A] --><scriptsrc="lib/MyExample.js"></script><!-- [B] -->
Minifyしていないコードと、Minify後のコードをGLOBAL以下に共存させ同時にテストできます
[C]
GLOBAL["MyExample"] に Minify前のモジュールをロードしテストします[D]
GLOBAL["MyExample_"] に Minify後のモジュールをロードしテストします
<scriptsrc="lib/MyExample.js"></script><!-- [C] --><scriptsrc="release/MyExample.min.js"></script><!-- [D] -->