Выполнение JavaScript без браузера? - PullRequest
125 голосов
/ 31 мая 2010

Я изучаю программирование на Javascript без браузера. Я хочу запускать сценарии из командной строки Linux или Mac OS X, так же, как мы запускаем любой другой язык сценариев (ruby, php, perl, python ...)

$ javascript my_javascript_code.js

Я посмотрел на обезьяну-паука (Mozilla) и v8 (Google), но оба они выглядят встроенными.

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

Если кому-то любопытно, почему я смотрю на это, я копаюсь в node.js . Производительность node.js заставляет задуматься, может ли javascript быть жизнеспособным языком сценариев для обработки больших данных.

Ответы [ 13 ]

56 голосов
/ 12 февраля 2012

Главный ответ

Да, чтобы ответить на ваш вопрос, можно использовать JavaScript в качестве «обычного» языка сценариев из командной строки, без браузера. Поскольку другие еще не упомянули об этом, я вижу, что стоит упомянуть:

В системах на основе Debian (включая Ubuntu, Linux Mint и aptosid / sidux, по крайней мере), кроме опций установки Rhino и других уже упомянутых, у вас есть другие варианты:

  • Установите пакет libmozjs-24-bin, который предоставит вам движок Mozilla Spidermonkey в командной строке в виде простого js24, который также можно использовать в качестве интерактивного интерпретатора. (24 в названии означает, что оно соответствует версии 24 Firefox).

  • Установите пакет libv8-dev, который предоставит вам движок Google V8. В качестве одного из примеров он имеет файл /usr/share/doc/libv8-dev/examples/shell.cc.gz, который можно распаковать и скомпилировать очень просто (например, g++ -Os shell.cc -o shell -lv8).

  • Установите пакет nodejs, и он будет доступен как в виде исполняемого файла nodejs, так и в качестве альтернативы (в смысле Debian) для обеспечения js исполняемый файл. Компиляция JIT предоставляется в качестве любезности V8.

  • Установите пакет libjavascriptcoregtk-3.0-bin и используйте интерпретатор JavaScript WebCit (jsc) в качестве обычного интерпретатора из командной строки. И это без необходимости иметь доступ к Mac. На многих платформах (например, x86 и x86_64) этот интерпретатор поставляется с JIT-компилятором.

Итак, почти без компиляции у вас будет три мощных движка JavaScript в вашем распоряжении.

Добавление

После того, как все будет установлено, вы можете просто создавать файлы с помощью строки #!/usr/bin/js shebang, и все будет работать:

$ cat foo.js 
#!/usr/bin/js

console.log("Hello, world!");
$ ls -lAF /usr/bin/js /etc/alternatives/js /usr/bin/nodejs
lrwxrwxrwx 1 root root      15 Jul 16 04:26 /etc/alternatives/js -> /usr/bin/nodejs*
lrwxrwxrwx 1 root root      20 Jul 16 04:26 /usr/bin/js -> /etc/alternatives/js*
-rwxr-xr-x 1 root root 1422004 Apr 28 20:31 /usr/bin/nodejs*
$ chmod a+x foo.js 
$ ./foo.js 
Hello, world!
$ js ./foo.js
Hello, world!
$
44 голосов
/ 31 мая 2010

Я нашел этот связанный вопрос по теме, но если вы хотите прямые ссылки, вот они:

  • Вы можете установить Rhino, как указали другие. В этом посте показан простой способ его запуска и запуска, а также псевдоним команды для легкого вызова
  • Если вы работаете на Mac, вы можете использовать JavaScriptCore, который запускает движок JavaScript WebKit. Вот пост на нем
  • Вы также можете использовать интерпретатор Chome / Google V8. Вот инструкции
  • JavaScript как OSA интересен тем, что позволяет (AFAIK) взаимодействовать со скриптовыми приложениями OS X, как если бы вы были в AppleScript (без ужасного синтаксиса)

Я удивлен, что node.js не поставляется с оболочкой, но я думаю, что он действительно больше похож на обратный вызов на основе epoll / selector / ориентированный на события веб-сервер, поэтому, возможно, ему не нужен полный набор функций JS , но я не слишком знаком с его внутренней работой.

Так как вы, похоже, интересуетесь node.js и поскольку он основан на V8, лучше всего следовать этим инструкциям по настройке среды V8, чтобы вы могли иметь согласованную основу для программирования на JavaScript (я надеюсь, что JSC и V8 в основном одинаковые, но я не уверен).

22 голосов
/ 01 октября 2012

Я установил Node.js на iMac и

node somefile.js

в bash будет работать.

10 голосов
/ 15 сентября 2011

Я знаю, что вы спрашивали о Linux и Mac; Я собираюсь предоставить ответ для Windows, в случае, если другие люди, которые заинтересованы в Windows, найдут ваш вопрос.

Windows включает движок Javascript, который можно использовать из командной строки.

Все версии Windows, начиная с Windows 98, включают в себя что-то под названием « Хост скриптов Windows ». Это стандартный для Windows способ поддержки «движков» скриптов. Начиная с первого выпуска, WSH поддерживает JScript, версию Microsoft Javascript. Среди прочего, это означает, что из командной строки Windows вы можете просто вызвать имя любого файла * .js, и он будет работать в движке JScript. (через wscript.exe или cscript.exe)

Вы можете увидеть этот вопрос: Что такое ProgId или CLSID для движка Javascript в IE9 (с кодовым названием "Chakra") , чтобы узнать, как вызвать высокопроизводительный движок IE9 Javascript из cscript.exe.

8 голосов
/ 24 августа 2013

Поскольку никто не упоминал об этом: начиная с Java 1.6 Java JDK также поставляется в комплекте с командной строкой JavaScript и REPL.

Он основан на Rhino: https://developer.mozilla.org/en/docs/Rhino

В Java 1.6 и 1.7 команда называется jrunscript (jrunscript.exe в Windows) и находится в папке bin JDK.

Начиная с Java 1.8 есть новая реализация JavaScript (Nashorn: https://blogs.oracle.com/nashorn/)

Итак, в Java 1.8 команда называется jjs (jjs.exe в Windows)

6 голосов
/ 31 мая 2010

FWIW, node.js поставляется с оболочкой, попробуйте ввести:

node-repl

как только вы установили node.js, чтобы увидеть его в действии. Для нормальной работы достаточно установить rlwrap.

3 голосов
/ 08 января 2014

Я использую Ubuntu 12.10 и js из командной строки

Это доступно с моей установкой Java:

el@apollo:~/foo$ java -version
java version "1.6.0_27"
el@apollo:~/foo$ which js
/usr/bin/js

Некоторые примеры:

el@apollo:~/foo$ js
> 5
5

> console.log("hello");
hello
undefined

> var f = function(){ console.log("derp"); };
undefined
> f();
derp

> var mybool = new Boolean();
undefined
> mybool
{}
> mybool == true
false
> mybool == false
true

> var myobj = {};
undefined
> myobj.skipper = "on my mark, engage!"
'on my mark, engage!'
> myobj.skipper.split(" ");
[ 'on',
  'my',
  'mark,',
  'engage!' ]

Небо - это предел, затем продолжайте движение.

3 голосов
/ 23 апреля 2011

Я знаю, что это старый, но вы должны попробовать Zombie.js . Безголовый браузер, безумно быстрый и идеальный для тестирования!

3 голосов
/ 31 мая 2010

Вы можете проверить Rhino .

Rhino Shell позволяет запускать сценарии JavaScript в пакетном режиме:

java org.mozilla.javascript.tools.shell.Main my_javascript_code.js [args]
2 голосов
/ 11 февраля 2015

Я обнаружил, что этот действительно изящный JS Engine с открытым исходным кодом, совместимый с ECMAScript, полностью написан на C и называется duktape

Duktape - это встраиваемый движок Javascript с акцентом на мобильность и компактность.

Удачи!

...