web-dev-qa-db-fra.com

Exécuter JavaScript sans navigateur?

Je regarde dans la programmation Javascript sans navigateur. Je souhaite exécuter des scripts à partir de la ligne de commande Linux ou Mac OS X, un peu comme n'importe quel autre langage de script (Ruby, php, Perl, python, etc.).

$ javascript my_javascript_code.js

J'ai regardé dans Spider Monkey (Mozilla) et v8 (Google), mais les deux semblent être intégrés.

Quelqu'un utilise-t-il Javascript comme langage de script à exécuter à partir de la ligne de commande?

Si quelqu'un est curieux de savoir pourquoi je m'intéresse à cela, j'ai fouillé node.js . Les performances de node.js me font me demander si javascript est un langage de script viable pour le traitement de données volumineuses.

125
Daniel

J'ai trouvé ceci question connexe sur le sujet, mais si vous voulez des liens directs, les voici:

  • Vous pouvez installer Rhino comme d'autres l'ont fait remarquer. This post montre un moyen facile de le mettre en marche et comment aliaser une commande pour l'appeler facilement
  • Si vous êtes sur un Mac, vous pouvez utiliser JavaScriptCore, qui appelle le moteur JavaScript de WebKit. Voici un post dessus
  • Vous pouvez également utiliser l'interprète V8 de Chome/Google. Voici les instructions
  • JavaScript en tant qu'OSA est intéressant car il vous permet (autant que je sache) d'interagir avec des applications OS X pouvant être scriptées comme si vous étiez en AppleScript (sans la syntaxe terrible)

Je suis surpris que node.js ne vienne pas avec un shell, mais je suppose que cela ressemble vraiment à un serveur Web epoll/basé sur le sélecteur/orienté événement, donc peut-être qu'il n'a pas besoin de l'ensemble complet de fonctionnalités JS, mais je ne connais pas trop bien son fonctionnement interne.

Puisque vous semblez intéressé par node.js et qu'il est basé sur la V8, il serait peut-être préférable de suivre ces instructions pour la configuration d'un environnement V8 afin de disposer d'une base cohérente pour votre programmation JavaScript (j'espère que JSC et la V8 les mêmes, mais je ne suis pas sûr).

44
jasonmp85

Réponse principale

Oui, pour répondre à votre question, il est possible d'utiliser JavaScript comme langage de script "normal" à partir de la ligne de commande, sans navigateur. Comme d’autres ne l’ont pas encore mentionné, je vois qu’il vaut la peine de le mentionner:

Sur les systèmes basés sur Debian (y compris Ubuntu, Linux Mint et aptosid/sidux, au moins), outre les options d'installation de Rhino et d'autres déjà mentionnées, vous avez d'autres options:

  • Installez le libmozjs-24-bin , qui vous fournira le moteur Spidermonkey de Mozilla sur la ligne de commande en tant que simple js24, qui peut également être utilisé comme interprète interactif. (Le 24 dans le nom signifie qu'il correspond à la version 24 de Firefox).

  • Installez le libv8-dev , qui vous fournira le moteur V8 de Google. Il a, comme exemple, le fichier /usr/share/doc/libv8-dev/examples/Shell.cc.gz que vous pouvez décompresser et compiler très simplement (par exemple, g++ -Os Shell.cc -o Shell -lv8).

  • Installez le paquet nodejs et il sera disponible à la fois comme exécutable nodejs et comme alternative (au sens de Debian) pour fournir l'exécutable js. La compilation JIT est fournie à titre gracieux par V8.

  • Installez le paquet libjavascriptcoregtk-3.0-bin et utilisez l'interpréteur JavaScriptCore de WebKit (jsc) comme interprète standard à partir de la ligne de commande. Et ceci sans avoir besoin d'avoir accès à un Mac. Sur de nombreuses plates-formes (x86 et x86_64, par exemple), cet interpréteur sera fourni avec un compilateur JIT.

Donc, avec presque aucune compilation, vous aurez trois des moteurs JavaScript lourds à votre disposition.

Addenda

Une fois que vous avez installé les choses, vous pouvez simplement créer des fichiers avec le #!/usr/bin/js Ligne Shebang et tout ira bien:

$ 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!
$
56
rbrito

J'ai installé Node.js sur un iMac et

node somefile.js

à bash travaillera.

23

Je sais que vous avez posé des questions sur Linux et Mac. Je vais vous donner la réponse pour Windows, au cas où d'autres personnes intéressées par Windows trouveraient votre question.

Windows inclut un moteur Javascript pouvant être utilisé à partir de la ligne de commande.

Toutes les versions de Windows, depuis Windows 98, ont inclus quelque chose appelé " l'hôte de script Windows ". C'est un moyen standard de Windows de prendre en charge les "moteurs" de script. Depuis la première version, WSH prend en charge JScript, la version Javascript de Microsoft. Entre autres choses, cela signifie que, à partir d'une ligne de commande Windows, vous pouvez simplement appeler le nom d'un fichier * .js, qui s'exécutera dans le moteur JScript. (via wscript.exe ou cscript.exe)

Vous pouvez voir cette question: Qu'est-ce que ProgId ou CLSID pour le moteur Javascript d'IE9 (nommé "Chakra") pour apprendre à appeler le moteur Javascript IE9 plus performant à partir de cscript.exe.

10
Cheeso

Depuis personne ne l’a mentionné: Depuis Java 1.6 Le Java JDK est également livré avec une ligne de commande JavaScript et REPL.

Il est basé sur Rhino: https://developer.mozilla.org/en/docs/Rhino

Dans Java 1.6 et 1.7, la commande s'appelle jrunscript (jrunscript.exe sous Windows) et se trouve dans le dossier bin du JDK.

À partir de Java 1.8, une nouvelle implémentation de JavaScript est fournie (Nashorn: https://blogs.Oracle.com/nashorn/ )

Donc, dans Java 1.8 la commande s'appelle jjs (jjs.exe sur Windows)

8
jbandi

FWIW, node.js est livré avec un shell, essayez de taper:

node-repl

une fois que vous avez installé node.js, vous pourrez le voir en action. C'est assez standard d'installer rlwrap pour le faire fonctionner correctement.

6
thejefflarson

Je sais que c'est vieux, mais vous devriez aussi essayer Zombie.js . Un navigateur sans tête incroyablement rapide et idéal pour les tests!

3
neebz

J'utilise Ubuntu 12.10 et js depuis la ligne de commande

Il est disponible avec mon installation de Java:

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

Quelques exemples:

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!' ]

Le ciel est la limite, alors continuez tout droit.

3
Eric Leschinski

Vous voudrez peut-être vérifier Rhino .

Le shell Rhino fournit un moyen d’exécuter des scripts JavaScript en mode de traitement par lots:

Java org.mozilla.javascript.tools.Shell.Main my_javascript_code.js [args]
3
Daniel Vassallo

J'ai trouvé ce moteur JS Engine conforme à la norme ECMAScript et open source vraiment génial, entièrement écrit en C appelé duktape

Duktape est un moteur Javascript intégrable, axé sur la portabilité et l'encombrement réduit.

Bonne chance!

2
Pawan Kumar

PhantomJS vous permet de le faire aussi

http://phantomjs.org/

2
Sameer

JSDB , disponible pour Linux, Windows et Mac devrait parfaitement convenir. Il utilise le moteur Javascript Spidermonkey de Mozilla et semble être moins fastidieux à installer par rapport à node.js (au moins la dernière fois que j'ai essayé node.js il y a quelques années).

J'ai trouvé JSDB dans cette liste intéressante de scripts Javascript: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Shells

1
Andz

Eh bien, il existe JavaScript as OSA , une extension qui fournit JavaScript comme alternative à AppleScript. J'utilise cela il y a environ 10 ans, je ne sais pas s'il fonctionne toujours avec les versions actuelles du système d'exploitation

1