Выполняете 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.