Загружать файлы по относительному пути к текущему файлу в Rhino - PullRequest
3 голосов
/ 20 февраля 2010

Я пишу программу на JavaScript на Rhino, которая должна загружать другие файлы JavaScript. Однако встроенная функция load() загружает файлы относительно текущего каталога , и мне нужно загрузить их относительно местоположения скрипта (чтобы программа могла называться любой каталог).

В других языках я бы использовал что-то вроде dirname(__FILE__) + "/path/file", но похоже, что у Rhino нет __FILE__ или чего-то подобного. Я попытался извлечь текущий файл из сгенерированного исключения, но он пуст, то есть следующий код выводит «true»:

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

Я пытался посмотреть на источники интерпретатора и использовать мост Java-JavaScript, но пока не нашел ничего полезного (вероятно, я посмотрю больше).

У кого-нибудь есть совет, как сделать так, чтобы загрузка файлов по относительным путям работала?

1 Ответ

2 голосов
/ 20 февраля 2010

Вероятно, проще всего заставить пользователей запустить скрипт запуска. Если вы используете * nix или OS X, вы можете поместить сценарий оболочки в тот же каталог, что и весь ваш 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 документированы здесь .

Нечто подобное может быть возможно в Windows; Я не знаю много о пакетных файлах CMD.EXE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...