@ledsun blog

無味の味は佳境に入らざればすなわち知れず

RhinoまたはAntでJavaScriptを複数ファイルに分けるために

JavaScirptには別のファイルに書かれたスクリプトを読み込む方法がありません。しかしスクリプトファイルが大きくなると複数のファイルに分けたくなります。 別のスクリプトファイルを読み込む(includeする)方法が必要です*1

次の file1.js を読み込みます。

var message = 'hello wordl!';

Rhinoシェルのloadメソッド

Rhinoシェルにはloadメソッドがあります。

load("file1.js");

print(message) // hello wordl! が表示される。

loadしてJavaScriptのファイルを読み込めば、読みんだファイルで定義したオブジェクト(変数でも関数でも)が使えます。 loadメソッドはJDKに付属しているjrunscriptコマンドでも使えます。

Ant

Apache AntのScriptタスクでloadメソッドを使うと以下のエラーが出ます。

<script language="javascript">
    load('file1.js');
</script>
javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: TypeError: Cannot find function load.

回避手段

<script language="javascript">
    eval(''+new String(org.apache.tools.ant.util.FileUtils.readFully(new java.io.FileReader('file.js'))));
</script>

Antのメソッドが使えるので、ファイルの中身を読み込んでJavaScirptの文字列に変換してevalします*2

*1:参考にしたサイト http://ja.softuses.com/31465

*2:読み込んだ直後はJavaのStringオブジェクトです。そのままではevalに引数として渡せません。