WSH/JScript を ECMAScript-262 5th に可能な限り近づける WSHModule というのを作りました。
WSHModule はWSH/JScriptで構築されたJavaScriptのVMです。
可能な限りECMAScript5標準としてJavaScriptを実行します。 スクリプトは、モジュール空間 (Node.js 互換 *1) で実行されます。
WSHModuleは、ECMA-262標準に近づけるためのwscript.exeのアップグレード版として利用することも可能(かもしれません)。
用途によっては、Node.jsを使用したほうが手っ取り早いです。が、JScriptは、Windowsにバンドルされています。 WSHModuleはwscript.exeで実行されるように、UI向けです。 Windowsで拡張子 .js のバッチスクリプトを実行するときに、WSHModule.exe を通すことで、快適な環境になると思います。
*1: Node.js自体がCommonJSの仕様のうち「Module 1.0」と「Unit Testing 1.0」には一応準拠してるだけなので、CommonJS準拠とは言えません
機能
- ECMAScript5標準の構文をサポート
- モジュール空間
- UTF-8で書ける
- alert, confirm, prompt, setTimeout, clearTimeout, setInterval, clearIntervalが使える
- (JScript Bug) catchなしのtry-finallyが書ける
- (JScript Bug) String.prototype.substr, Array.prototype.indexOf, Array.prototype.splice などを ECMA-262標準に修正
- WSHModule.exe ダブルクリックでシェル画面が開く
- いくつかのWScriptで扱えない機能をモジュールとして追加(clip, console, fs, util 等)
ダウンロード
要件
以下の環境で動作します- Windows (32bit/64bit)
実行方法
WSHModule.exe "C:/path/to/myscript.js"
もしくは、 "C:/path/to/myscript.js" を WSHModule.exe にドラッグドロップ
簡単な方法:
- WSHModule.exe のショートカットをデスクトップ等に作成
- 任意のスクリプト(.js)をショットカットにドラッグドロップして実行
テスト
以下の手順で簡単なテストスクリプトが実行できます。- cd WSHModule
- "bin/WSHModule.exe" "scripts/test.js"
ToDo
いろいろと大げさなこと言ってますが以下の項目が未実装です- Getter と Setter がない
- "use strict" が使えない
サンプルコード
Hello World:alert(' hello world !'.split(/\s+/).filter(function(s) { return s; }).map(function(s) { return s.charAt(0).toUpperCase() + s.slice(1); }).join(' ')); // 'Hello World !'
クリップボードを扱う例:
// src/clip.js参照 var clip = require('clip'); var curClip = clip.getAsText(); alert('現在のクリップボード「' + curClip + '」'); clip.setAsText('test'); alert('クリップボードに「test」を設定しました');
ファイルを扱う例:
// fs は Node.js/fs とだいたい同じ仕様になってます(扱えるのはSyncのみ) // http://nodejs.org/api/fs.html // http://nodejs.jp/nodejs.org_ja/docs/v0.10/api/fs.html var fs = require('fs'); console.log(fs.readFileSync(__filename), 'このファイルの中身');
なにかあれば以下のレポジトリのIssues, または @polygon_planet へお願いします。