1. itasnasal

    Posted

    itasnasal
Changes in title
+CommonJS(風)なんっちゃってrequire
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,62 @@
+いろいろあってWSH/Jscriptを使い続けていますが、先につながるように以下のような点に気を付けるようにし始めました。
+
+・CommonJS(風)のモジュールの仕組みを取り入れる。
+・MS/WSH固有のことは極力避ける。やむなく使う場合は極力隠蔽する。
+・なるべくCommonJSとかnode.jsとかを意識するよう心掛ける。
+
+まず第一歩として、WSHにはないrequireを用意することにしました。
+
+具体的にはnode.jsの仕様を参考にして、とりあえずは必要最小限の機能から始めて、まずは自分用の「モジュール化の基盤」を作ることからスタートする。今までの自分の小物資産をどんどんモジュール化していく。
+
+そしてrequireも少しずつ強化していく。
+
+こんな感じでぼちぼちやっていこうかな。と。
+で、なんちゃってrequireの初版がこちらになります。
+
+```require.js
+// Function( 'context', 'path', これ )
+// wsh用commonjs(風)対応のなんちゃってrequire
+
+var fso = WScript.CreateObject("Scripting.FileSystemObject");
+var libpath = fso.GetAbsolutePathName(path)+"\\";
+
+context.require = function(path) {
+ var fso = WScript.CreateObject("Scripting.FileSystemObject");
+ var file_path = libpath + path + ".js";
+ var input_stream = fso.OpenTextFile(file_path, 1, false);
+ var module_code = input_stream.ReadAll();
+ input_stream.Close();
+ var eval_code = "(function(){" +
+ "var module = {};" +
+ "module.exports = {};" +
+ module_code + ";" +
+ "return module.exports;" +
+ "})()";
+ return eval(eval_code);
+}
+context.require.libpath = libpath || '';
+
+return libpath;
+```
+
+使い方ですが、どこかにライブラリ用のフォルダを作り、そこにこれとモジュールファイルを置きます。利用する側は以下のようなテンプレートを用意しました。「requireおび」と命名しました。
+
+```mybase.js
+///////////////////////////////////////////////////////////////////////////////
+var global = Function("return this")(); // globalを設定&require 拡張。
+var libpath = "./".replace("/","\\"); //←←←
+(Function( 'context', 'path', (new ActiveXObject("Scripting.FileSystemObject")).
+OpenTextFile( libpath + "require.js",1).ReadAll() ))(global,libpath);
+///////////////////////////////////////////////////////////////////////////////
+
+// ここからコードを書く。
+```
+←←←の左側に、自分のライブラリのパスを入れておきます。上の例はとりあえずカレントを見るようにしてあります。テンプレートを用いて書いたスクリプトと、require.jsと、モジュールファイルとを一緒のところにおいておけばとりあえず動く、と。
+
+もしきちんと使い続けるのであれば、きちんとライブラリのフォルダを作った方がいいと思います。本当はカレント優先でライブラリと両方見るようにする、とか、ライブラリのパスを環境変数から取ってきてテンプレートに書かなくてもよくする、とかいろいろ課題はありますが、追ってぼちぼち。
+
+
+
+
+
+