Виконання JavaScript без браузера?


129

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

$ javascript my_javascript_code.js

Я заглянув у павукову мавпу (Mozilla) та v8 (Google), але обидва вони, схоже, вбудовані.

Хтось використовує Javascript як мову сценаріїв, яку слід виконати з командного рядка?

Якщо кому - то цікаво , чому я дивлюся в це, я колупатися node.js . Продуктивність node.js змушує мене замислитись, чи JavaScript може бути життєздатною мовою скриптів для обробки великих даних.


node.js - інтерпретатор командного рядка JavaScript чи не так?
Натан

5
node.js - не інтерпретатор, це рамка асинхронізації, побудована на основі реалізації V8 JavaScript від Google. Хоча я вірю, що JavaScript-інтеріптер V8 включений у встановлення вузла

1
Якщо інтерпретатор CLI V8 стане популярним, це може бути справді хорошим навчальним інструментом. Я думаю, що програмувати на JavaScript може бути дуже цікаво. Луа може бути, чесно кажучи, найкращим вибором ("класи" JS бентежать пекло усіх), але здатність JS бути кинутою в Мережу сподобалася б майстрам. Я можу спробувати сам цей V8 CLI.
jasonmp85

@ jasonmp85 виконання функцій за допомогою нового ключового слова будує екземпляри об'єкта. Коли ви посилаєтесь на властивість / метод на екземпляр, якщо сам об'єкт його не має, перевіряється властивість прототипу функції конструктора. Використовуйте це для загальнодоступних методів та визначте значення vars для функції конструктора, щоб ефективно отримувати приватні методи / реквізити (це технічно закриття ref'd vars). Кінець.
Ерік Реппен

Відповіді:


46

Я знайшов це пов’язане питання з теми, але якщо ви хочете прямі посилання, ось вони:

  • Ви можете встановити Rhino так, як вказували інші. У цій публікації показаний простий спосіб її запуску та запуску та як псевдонім команди легко викликати її
  • Якщо ви перебуваєте на Mac, ви можете використовувати JavaScriptCore, який викликає двигун JavaScript WebKit. Ось допис у ньому
  • Ви також можете використовувати інтерпретатор V8 Chome / Google. Ось інструкції
  • JavaScript як OSA цікавий тим, що дозволяє вам (AFAIK) взаємодіяти із програмами OS X, написаними на екрані, як якщо б ви були в AppleScript (без страшного синтаксису)

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

Оскільки ви, схоже, зацікавлені в node.js і оскільки він базується на V8, можливо, найкраще дотримуватися цих інструкцій щодо налаштування середовища V8, щоб ви могли мати стійку основу для програмування JavaScript (сподіваюся, що JSC і V8 здебільшого те саме, але я не впевнений).


посилання перекладача Chrome / Google V8 - саме те, що я шукав! Дякую!
Даніель

2
NodeJS в 0.1.101 має node-repl, який дає вам CLI доступ до середовища. Це чудово для тестування / навчання JS.
CyberFonic

З nodejs v0.10.25 на Ubuntu введення nodejsв терміналі надає доступ до REPL.
Иван Бишевац

Які з перерахованих вище, якщо такі є, містять HTML DOM?
Старий Гейзер

57

Основна відповідь

Так, щоб відповісти на ваше запитання, можна використовувати JavaScript як "звичайну" мову скриптів з командного рядка, без браузера. Оскільки інші ще не згадували про це, я бачу, що варто згадати:

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

  • Встановіть libmozjs-24-binпакет, який надасть вам движок Mozilla Spidermonkey в командному рядку як простий js24, який можна використовувати і як інтерактивний перекладач. ( 24Ім'я означає, що воно відповідає версії 24 Firefox).

  • Встановіть libv8-devпакет, який надасть вам двигун V8 від Google. Як один із його прикладів, є файл, /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 WebKit ( 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!
$

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 ". Це стандартний для Windows спосіб підтримки сценаріїв "двигунів". З першого випуску WSH підтримує JScript, версію Javascript від Microsoft. Крім усього іншого, це означає, що з командного рядка Windows ви можете просто викликати ім'я будь-якого * .js-файлу, і він запускатиметься в механізмі JScript. (через wscript.exe або cscript.exe)

Ви можете побачити це питання: Що таке ProgId або CLSID для механізму Javascript IE9 (з кодовою назвою "Чакра"), щоб дізнатися, як викликати двигун Javascript IE9 більш високої продуктивності від cscript.exe.


8

Оскільки про це ніхто не згадував: з Java 1.6 Java JDK також поставляється в комплекті з командним рядком JavaScript та REPL.

В його основі лежить носоріг: 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, а також використовую хеш-баг і дуже добре, щоб отримати швидкі програми, що працюють з 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 Engine із відкритим кодом з відкритим кодом, повністю написаний на C, який називається duktape

Duktape - це вбудований двигун Javascript з акцентом на портативність та компактну площу.

Удачі!


1

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


1

JSDB , доступний для Linux, Windows та Mac, повинен досить добре відповідати рахунку. Він використовує механізм JavaScript Spidermonkey Javascript Mozilla і, здається, менше клопоту встановлювати порівняно з 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.