Поскольку у меня большие трудности с поиском базовых примеров об оболочках / интерпретаторах JavaScript, особенно rhino
, в Ubuntu - я опубликую это здесь ...
По сути, я был немного смущен тем, чтоустановить и какую командную строку вызывать :)
Прежде всего, я нашел Ошибка # 705339 в Rhino (Ubuntu): «Оболочка Rhino аварийно завершает работу с NullPointerException» - и понял, чтоOpenJDK фактически устанавливает rhino.jar
архив Java.Так что, если у вас это есть, вы можете немедленно сделать это в оболочке терминала bash:
$ java -jar /usr/lib/jvm/java-6-openjdk/jre/lib/rhino.jar
Rhino 1.7 release 2 2010 11 17
js> print("answer " + 42.0);
answer 42
js> quit()
И этого достаточно для базовых вещей ... Однако, если вы хотите использоватьDOM window
объект или setTimeout()
функция - по сути, это «специфичные для браузера реализации» ( для setTimeout
, см. Также SO: 7286178 ) и механизм сценариевбез браузера не "знал бы" о них.
Однако, по крайней мере для rhino
, это исправлено библиотекой '1026 * Envjs ' среда браузера ', чья Последняя версия - 1.2 для rhino
- env.rhino.js ( см. SO: 6170676 для setTimeout
в rhino
).
Таким образом, мы можем сделать что-то вроде этого:
wget http://www.envjs.com/dist/env.rhino.1.2.js
$ java -jar /usr/lib/jvm/java-6-openjdk/jre/lib/rhino.jar
Rhino 1.7 release 2 2010 11 17
js> load('env.rhino.1.2.js');
js: "env.rhino.1.2.js", line 1247: uncaught JavaScript runtime exception: TypeError: Cannot call property getCurrentContext in object [JavaPackage org.mozilla.javascript.Context]. It is not a function, it is "object".
at env.rhino.1.2.js:1247
at <stdin>:2
js> ^C
... и ooops - это не работает :) Однако, это разъясняется в Не может работать 1.2из-за ошибки getCurrentContext.- Env.js |Группы Google :
Извините, Envjs не может работать с носорогом в комплекте с Java.вам нужно использовать 1.7rc2, доступный здесь:
http://www.mozilla.org/rhino/download.html
К счастью, вместо сборки из исходного кода, в Ubuntu мы можем напрямую сделать:
sudo apt-get install rhino
... поскольку, как указано в списке файлов rhino , этот пакет устанавливает js-1.7R2.jar
.Пакет также устанавливает скрипт rhino
, который, по сути, является оболочкой для этих Java-архивов (см. less $(which rhino)
), поэтому мы можем использовать его вместо ввода java -jar ...
и т. Д .:
$ rhino
Rhino 1.7 release 2 2010 11 17
js> load('env.rhino.1.2.js'); // takes a while to load
[ Envjs/1.6 (Rhino; U; Linux i386 2.6.38-11-generic; en-US; rv:1.7.0.rc2) Resig/20070309 PilotFish/1.2.13 ]
js> print("loaded " + 1.2);
loaded 1.2
js> window;
[Window]
js> ^C
Однако теперь попробуйте включить эти же строки в скрипт, назовем его test.js
:
load('env.rhino.1.2.js'); // takes a while to load
print("loaded " + 1.2);
print(window);
и попробуем вызвать на нем rhino
:
$ rhino test.js
loaded 1.2
js: uncaught JavaScript runtime exception: ReferenceError: "window" is not defined.
О, дорогой - опять не получается, что теперь?:) Хорошо, к счастью, даже на это есть несколько указаний в Руководстве по Envjs ( примечание: разрешите JavaScript для этой страницы, в противном случае код будет едва видимым ) - в частности:
# Запуск env.rhino.js из скрипта или командной строки
# Обратите внимание на настройку оптимизации
java -jar lib / js.jar -opt -1 myscript.js
Правильно - наконец, мы просто добавляем этот параметр оптимизации и:
$ rhino -opt -1 test.js
[ Envjs/1.6 (Rhino; U; Linux i386 2.6.38-11-generic; en-US; rv:1.7.0.rc2) Resig/20070309 PilotFish/1.2.13 ]
loaded 1.2
[Window]
... наконец, это работает :) РЕДАКТИРОВАТЬ: с env.rhino.1.2.js
вы также можете использовать console.log()
для записи на стандартный вывод.РЕДАКТИРОВАТЬ: Чтобы запустить отладчик Java rhino
, посмотрите с помощью less $(which rhino)
где установлены конкретные .jars, а затем вызовите java
напрямую ( сценарий rhino
использует другой набор переключателей командной строки, ипоэтому нельзя убедить вызвать отладчик ):
java -cp /usr/share/java/js.jar org.mozilla.javascript.tools.debugger.Main test.js
Если вы попытаетесь запустить тот же скрипт сейчас с spidermonkey
(см. также инструкции PPA в Лучший способ получить spidermonkey js в Ubuntu 11.04? ), вы получите:
$ js test.js
env.rhino.1.2.js:1247: ReferenceError: Packages is not defined
... то есть spidermonkey
будет не работать с env.rhino.1.2.js
,
Ну, надеюсь, это кому-нибудь поможет,
Ура!