Выполняете JavaScript без браузера?


129

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

$ javascript my_javascript_code.js

Я посмотрел на Spider Monkey (Mozilla) и v8 (Google), но оба они, похоже, встроены.

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

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


node.js - это интерпретатор командной строки javascript, не так ли?
— Натан

5
node.js - это не интерпретатор, это асинхронная структура, построенная на реализации JavaScript V8 от Google. Хотя я действительно считаю, что Javascript intererpter V8 включен в установку узла

1
Если интерпретатор V8 CLI станет популярным, он может стать действительно хорошим обучающим инструментом. Я думаю, что обучение программированию на JavaScript может быть довольно забавным. Честно говоря, Lua может быть лучшим выбором («классы» JS сбивают с толку всех), но способность JS быть размещена в Интернете понравится любителям возиться. Я могу сам попробовать этот V8 CLI.
— jasonmp85

@ jasonmp85 выполнение функций с новым ключевым словом создает экземпляры объектов. Когда вы ссылаетесь на свойство / метод в экземпляре, если сам объект не имеет его, проверяется свойство прототипа функции конструктора. Используйте это для общедоступных методов и определяйте переменные, локальные для функции конструктора, чтобы эффективно получать частные методы / реквизиты (технически это закрытые переменные ref'd). Конец.
— Эрик Реппен,

Ответы:


46

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

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

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

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


ссылка на интерпретатор Chrome / Google V8 - это именно то, что я искал! Спасибо!
— Daniel

2
NodeJS в версии 0.1.101 имеет node-repl, который дает вам доступ к среде через интерфейс командной строки. Отлично подходит для тестирования / изучения JS.
— CyberFonic

С nodejs v0.10.25 на Ubuntu ввод nodejsв терминале дает доступ к REPL.
— Иван Бишевац

Что из вышеперечисленного, если таковое имеется, включает HTML DOM?
— Old Geezer

57

Основной ответ

Да, отвечая на ваш вопрос, можно использовать 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и используйте интерпретатор JavaScriptCore ( jsc) WebKit как обычный интерпретатор из командной строки. И это без необходимости иметь доступ к 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!
$

23

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

node somefile.js

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


О, МОЙ БОГ! @ aw04 Совершенно верно
— theapache64

для меня это было nodejs somefile.jsс тех пор, как я установил пакет
— nodejs

это правильный ответ в 2019 году. Node.JS - это всегда самый распространенный и простой способ.
— wilsonhobbs

10

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

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

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

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


8

Поскольку никто об этом не упомянул: Начиная с 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

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

node-repl

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


Я нахожу, что node-repl, а также использование hash-bang очень хороши для быстрой работы программ с NodeJS. Это быстро и легко.
— CyberFonic

3

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

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

java org.mozilla.javascript.tools.shell.Main my_javascript_code.js [args]

3

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


3

Я использую 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!' ]

Небо - это предел, тогда продолжайте идти.



2

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

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

Удачи!


1

Ну, есть JavaScript как OSA , расширение, которое предоставляет JavaScript в качестве альтернативы appleScript. Я использовал это около 10 лет назад, не знаю, работает ли он до сих пор с текущими версиями ОС


1

JSDB , доступный для Linux, Windows и Mac, должен вполне соответствовать всем требованиям. Он использует движок Mozilla Spidermonkey Javascript и, похоже, его установка менее сложна по сравнению с node.js (по крайней мере, в последний раз я пробовал node.js пару лет назад).

Я нашел JSDB из этого интересного списка оболочек Javascript: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Shells

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.