Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
uupaa edited this pageJun 5, 2015 ·69 revisions

このエントリでは、WebModule に使われている 実装パターン(WebModulePattern) について紹介しています。

WebModulePattern は、どこでも動作し、I/Fと実装が分離された見通しの良いモジュールを記述するためのコードパターンです。以下のように記述すると、Browser, Node.js, Worker, NW.js で動作するモジュールを構築できます。

WebModulePattern

以下は MyExample モジュールを export するパターンになります。

GLOBAL["WebModule"]["exports"]("MyExample",function(global){"use strict";functionMyExample(){ ...}returnMyExample;// return entity});

entity に対して何か行いたい場合や、GLOBAL["WebModule"] に依存したくない場合は、以下のように記述してください。

(functionmoduleExporter(moduleName,moduleClosure){// http://git.io/WebModule"use strict";varentity=GLOBAL["WebModule"] ?GLOBAL["WebModule"]["exports"](name,closure)                                     :closure(GLOBAL);// entity に対する操作returnentity;})("MyExample",functionmoduleClosure(global){functionMyExample(){ ...}returnMyExample;// return entity});

共通コード

GLOBAL を導き出すコードGLOBAL.WebModule.exports 関数などの共通コードは、別ファイル(WebModule.js)に記述し、MyExample.js より先にロードしておきます。

// --- global variables ------------------------------------// http://git.io/WebModule// --- global variables ------------------------------------// https://github.com/uupaa/WebModule/wiki/WebModuleIdiomvarGLOBAL=GLOBAL||(this||0).self||global;// --- environment detection -------------------------------GLOBAL.IN_NODE_OR_NW=!!GLOBAL.global;GLOBAL.IN_BROWSER=!GLOBAL.IN_NODE_OR_NW&&"document"inGLOBAL;GLOBAL.IN_WORKER=!GLOBAL.IN_NODE_OR_NW&&"WorkerLocation"inGLOBAL;GLOBAL.IN_NODE=GLOBAL.IN_NODE_OR_NW&&!/native/.test(setTimeout);GLOBAL.IN_NW=GLOBAL.IN_NODE_OR_NW&&/native/.test(setTimeout);// --- validate and assert functions -----------------------//{@dev https://github.com/uupaa/WebModule/wiki/ValidateGLOBAL["$type"]=function(value,types){returnGLOBAL["Valid"] ?GLOBAL["Valid"].type(value,types) :true;};GLOBAL["$keys"]=function(value,keys){returnGLOBAL["Valid"] ?GLOBAL["Valid"].keys(value,keys)  :true;};GLOBAL["$some"]=function(value,candidate,ignoreCase){returnGLOBAL["Valid"] ?GLOBAL["Valid"].some(value,candidate,ignoreCase) :true;};GLOBAL["$args"]=function(api,args){if(GLOBAL["Valid"]){GLOBAL["Valid"].args(api,args);}};GLOBAL["$valid"]=function(value,api,highlihgt){if(GLOBAL["Valid"]){GLOBAL["Valid"](value,api,highlihgt);}};//}@dev// --- WebModule ------------------------------------------GLOBAL.WebModule={exports:function(name,closure){varalias=nameinGLOBAL ?(name+"_") :name;varentity=aliasinthis ?this[alias]                                   :this[alias]=closure(GLOBAL);if(typeofexports!=="undefined"){module["exports"]=entity;}returnentity;}};

古いスタイルで書かれたコードを WebModulePattern に書き直す方法 についても参照してください。

ES6::Modules への対応

TBD: このセクションは推敲や検証が終わっていません。

WebModulePattern で書かれたコードを ES6::Modules の export に対応させるには先頭に1行追加します。

export// この行を追加GLOBAL["WebModule"]["exports"]("MyExample",function(global){"use strict";functionMyExample(){ ...}returnentity;});
Clone this wiki locally

[8]ページ先頭

©2009-2025 Movatter.jp