在Rhino中的当前文件的相对路径上加载文件

时间:2010-02-20 17:12:47

标签: javascript load rhino

我正在Rhino编写一个JavaScript程序,需要加载其他JavaScript文件。但是内置的load()函数相对于当前目录加载文件,我需要相对于脚本的位置加载它们(以便程序可以在任何目录中调用。)

在其他语言中,我会使用像dirname(__FILE__) + "/path/file"这样的东西,但似乎Rhino没有__FILE__或类似的东西。我试图从抛出的异常中提取当前文件,但它是空的,即以下代码打印“true”:

try {
  throw new Error();
} catch (e) {
  print(e.fileName === "");
}

我试着查看解释器源代码并使用Java-JavaScript桥接器,但我找不到任何有用的东西(我可能看起来更多)。

是否有人知道如何在相对路径上加载文件?

1 个答案:

答案 0 :(得分:2)

让用户运行启动器脚本可能最容易。如果您使用的是* nix或OS X,则可以将shell脚本放入与所有Javascript相同的目录中,这会在启动之前将目录更改为脚本的目录:

#!/bin/sh
cd `dirname "$0"`
java -jar js.jar your_script.js

如果你的脚本需要在用户的当前目录中运行,你可以让包装器在命令行中传递它的位置:

#!/bin/sh
DIR=`basename "$0"`
java -jar "$DIR/js.jar" "$DIR/loader.js" "$DIR"

然后在loader.js中,使用Rhino的内置参数变量来访问“$ DIR”:

load(arguments[0] + "/another_js_file.js");

Rhino函数记录在案here

在Windows上可能有类似的东西;我对CMD.EXE批处理文件了解不多。