我正在Rhino编写一个JavaScript程序,需要加载其他JavaScript文件。但是内置的load()
函数相对于当前目录加载文件,我需要相对于脚本的位置加载它们(以便程序可以在任何目录中调用。)
在其他语言中,我会使用像dirname(__FILE__) + "/path/file"
这样的东西,但似乎Rhino没有__FILE__
或类似的东西。我试图从抛出的异常中提取当前文件,但它是空的,即以下代码打印“true”:
try {
throw new Error();
} catch (e) {
print(e.fileName === "");
}
我试着查看解释器源代码并使用Java-JavaScript桥接器,但我找不到任何有用的东西(我可能看起来更多)。
是否有人知道如何在相对路径上加载文件?
答案 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批处理文件了解不多。