Exécuter JavaScript sans navigateur?


129

Je cherche 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 nous exécutons n'importe quel autre langage de script (ruby, php, perl, python ...)

$ javascript my_javascript_code.js

J'ai examiné le singe araignée (Mozilla) et la v8 (Google), mais ces deux éléments 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 suis à la recherche dans ce, j'ai farfouillé Node.js . Les performances de node.js me font me demander si javascript peut être un langage de script viable pour le traitement de données volumineuses.


node.js est un interpréteur de ligne de commande javascript n'est-ce pas?
Nathan

5
node.js n'est pas un interpréteur, c'est un framework async construit sur l'implémentation javascript V8 de Google. Bien que je crois que l'intererpeur javascript de V8 est inclus dans une installation de nœud

1
Si l'interpréteur CLI de V8 devient populaire, il pourrait être un très bon outil d'enseignement. Je pense qu'apprendre à programmer en JavaScript pourrait être assez amusant. Lua pourrait honnêtement être le meilleur choix (les «classes» de JS déroutent tout le monde), mais la capacité de JS à être lancée sur le Web plairait aux bricoleurs. Je peux essayer cette CLI V8 moi-même.
jasonmp85

@ jasonmp85 l'exécution de fonctions avec un nouveau mot-clé crée des instances d'objet. Lorsque vous référencez une propriété / méthode sur une instance, si l'objet lui-même ne l'a pas, la propriété prototype de la fonction constructeur est vérifiée. Utilisez ceci pour les méthodes publiques et définissez des variables locales à la fonction constructeur pour obtenir efficacement des méthodes / accessoires privés (ce sont techniquement des variables ref'd ref'd). La fin.
Erik Reppen

Réponses:


46

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

  • Vous pouvez installer Rhino comme d'autres l'ont indiqué. Cet article montre un moyen simple de le faire fonctionner et comment aliaser une commande pour l'invoquer facilement
  • Si vous êtes sur un Mac, vous pouvez utiliser JavaScriptCore, qui appelle le moteur JavaScript de WebKit. Voici un article dessus
  • Vous pouvez également utiliser l'interpréteur V8 de Chome / Google. Voici les instructions
  • Le JavaScript comme OSA est intéressant car il vous permet (AFAIK) d'interagir avec des applications OS X scriptables comme si vous étiez dans AppleScript (sans la terrible syntaxe)

Je suis surpris que node.js ne soit pas livré avec un shell, mais je suppose que c'est vraiment plus comme un serveur Web de rappel / événement basé sur epoll / selector, donc peut-être qu'il n'a pas besoin de l'ensemble complet de fonctionnalités JS, mais je Je ne connais pas trop son fonctionnement interne.

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


le lien de l'interpréteur Chrome / Google V8 est exactement ce que je cherchais! Je vous remercie!
Daniel

2
NodeJS dans 0.1.101 a un node-repl qui vous donne un accès CLI à l'environnement. C'est génial pour tester / apprendre JS.
CyberFonic

Avec nodejs v0.10.25 sur Ubuntu, la saisie nodejsdans le terminal donne accès à REPL.
Иван Бишевац

Lequel des éléments ci-dessus, le cas échéant, inclut le DOM HTML?
Old Geezer

57

Réponse principale

Oui, pour répondre à votre question, il est possible d'utiliser JavaScript comme langage de script "normal" depuis la ligne de commande, sans navigateur. Puisque 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 (et cela inclut 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-binpackage, qui vous fournira le moteur Spidermonkey de Mozilla sur la ligne de commande comme un simple js24, qui peut également être utilisé comme un interpréteur interactif. (Le 24dans le nom signifie qu'il correspond à la version 24 de Firefox).

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

  • Installez le paquet nodejset il sera disponible à la fois comme exécutable nodejset comme alternative (au sens de Debian) pour fournir l' jsexécutable. La compilation JIT est fournie avec l'aimable autorisation de V8.

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

Ainsi, 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 la #!/usr/bin/jsligne shebang et les choses fonctionneront simplement:

$ 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

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

node somefile.js

in bash fonctionnera.


OMG! @ aw04 Absolument
theapache64

pour moi c'était nodejs somefile.jsdepuis que j'avais installé le package nodejs
user2490003

c'est la bonne réponse en 2019. Node.JS est toujours le moyen le plus omniprésent et le plus simple.
wilsonhobbs

10

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

Windows inclut un moteur Javascript qui peut ê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 une manière standard de Windows de prendre en charge les "moteurs" de script. Depuis la première version, WSH prend en charge JScript, la version de Javascript de Microsoft. Entre autres choses, cela signifie que, à partir d'une ligne de commande Windows, vous pouvez simplement appeler le nom de n'importe quel fichier * .js, et il fonctionnera dans le moteur JScript. (via wscript.exe ou cscript.exe)

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


8

Puisque personne ne l'a mentionné: Depuis Java 1.6, le JDK Java 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 est appelée jrunscript(jrunscript.exe sous Windows) et se trouve dans le dossier bin du JDK.

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

Donc, en Java 1.8, la commande est appelée jjs( jjs.exesous Windows)


6

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

node-repl

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


Je trouve que node-repl et utiliser hash-bang sont tous deux très bons pour faire fonctionner des programmes rapides avec NodeJS. C'est rapide et facile à utiliser.
CyberFonic

3

Vous voudrez peut-être consulter Rhino .

Rhino Shell fournit un moyen d'exécuter des scripts JavaScript en mode batch:

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

3

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


3

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.



2

J'ai trouvé ce moteur JS compatible ECMAScript open source vraiment astucieux entièrement écrit en C appelé duktape

Duktape est un moteur Javascript intégrable, axé sur la portabilité et l'empreinte compacte.

Bonne chance!


1

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


1

JSDB , disponible pour Linux, Windows et Mac devrait plutôt bien convenir. Il utilise le moteur Javascript Spidermonkey de Mozilla et semble être moins compliqué à installer que 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 shells Javascript: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Shells

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.