在没有浏览器的情况下执行JavaScript?


129

我正在寻找没有浏览器的Javascript编程。我想从Linux或Mac OS X命令行运行脚本,就像我们运行任何其他脚本语言(红宝石,PHP,Perl,Python ...)一样

$ javascript my_javascript_code.js

我研究了蜘蛛猴(Mozilla)和v8(Google),但它们似乎都是嵌入式的。

是否有人将Javascript作为脚本语言从命令行执行?

如果有人好奇,为什么我期待到这一点,我一直在关注着Node.js的。node.js的性能使我想知道javascript是否可能是用于处理大数据的可行脚本语言。


node.js是一个JavaScript命令行解释器,不是吗?
内森2010年

5
node.js不是解释器,它是基于Google的V8 javascript实现构建的异步框架。尽管我确实相信V8的javascript插入器已包含在节点安装中

1
如果V8的CLI解释器流行起来,它可能是一个非常好的教学工具。我认为学习用JavaScript编程可能会很有趣。老实说Lua可能是最好的选择(JS的“类”使所有人困惑),但是JS在网络上抛出的能力将吸引那些修补匠。我可以亲自试用此V8 CLI。
jasonmp85

@ jasonmp85使用新关键字执行函数将构建对象实例。当您在实例上引用属性/方法时,如果对象本身没有属性/方法,则将检查构造函数的prototype属性。将其用于公共方法,并在构造函数的局部定义vars,以有效地获取私有方法/ props(从技术上讲,这是闭包引用的vars)。结束。
埃里克·雷彭

Answers:


46

我在该主题上找到了这个相关问题,但是如果您想要直接链接,可以在这里找到:

  • 正如其他人指出的那样,您可以安装Rhino。这篇文章展示了一种简单的方法来启动和运行它,以及如何使用别名来轻松调用它
  • 如果您使用的是Mac,则可以使用JavaScriptCore,它调用WebKit的JavaScript引擎。这里有一个帖子就可以了
  • 您也可以使用Chome / Google的V8解释器。这是说明
  • 作为OSA的JavaScript很有趣,因为它使您(AFAIK)与可编写脚本的OS X应用程序进行交互,就好像您在AppleScript中一样(没有可怕的语法)

我很惊讶node.js没有外壳,但是我想它实际上更像是基于epoll /基于选择器的回调/面向事件的网络服务器,因此也许它不需要完整的JS功能集,但是我对它的内部运作不太熟悉。

由于您似乎对node.js感兴趣,并且它基于V8,因此最好遵循这些说明来设置V8环境,以便为JavaScript编程提供一个一致的基础(我希望JSC和V8主要是一样,但我不确定)。


Chrome / Google V8解释器链接正是我想要的!谢谢!
丹尼尔(Daniel)2010年

2
0.1.101中的NodeJS有一个node-repl,它使您可以通过CLI对环境进行访问。非常适合测试/学习JS。
Cyber​​Fonic

在Ubuntu上使用nodejs v0.10.25时,nodejs在终端中键入即可访问REPL。
ИванБишевац

上面的哪一个(如果有的话)包含HTML DOM?
老盖泽

57

主要答案

是的,要回答您的问题,可以在没有浏览器的情况下从命令行将JavaScript用作“常规”脚本语言。由于其他人还没有提到它,所以我认为值得一提:

在基于Debian的系统上(至少包括Ubuntu,Linux Mint和aptosid / sidux),除了安装Rhino和已经提到的其他选项外,还有其他选择:

  • 安装该libmozjs-24-bin软件包,它将在命令行上以简单的方式为您提供Mozilla的Spidermonkey引擎,该引擎js24也可以用作交互式解释器。(24名称中的表示它对应于Firefox的版本24)。

  • 安装该libv8-dev软件包,它将为您提供Google的V8引擎。作为示例之一,它具有/usr/share/doc/libv8-dev/examples/shell.cc.gz可以非常简单地解压缩和编译的文件(例如g++ -Os shell.cc -o shell -lv8)。

  • 安装该软件包nodejs,它将以可执行文件的形式提供,也可以nodejs其他方式(在Debian-sense中)提供js可执行文件。JIT编译是V8提供的。

  • 安装软件包,libjavascriptcoregtk-3.0-binjsc从命令行使用WebKit的JavaScriptCore解释器()作为常规解释器。而且,这不需要访问Mac。在许多平台(例如x86和x86_64)上,此解释器将带有JIT编译器。

因此,几乎没有任何编译,您将可以使用三个重量级的JavaScript引擎。

附录

一旦安装了东西,您可以简单地使用#!/usr/bin/jsshebang行创建文件,然后一切就可以正常工作:

$ 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

我已经在iMac上安装了Node.js,

node somefile.js

在bash中将起作用。


我的天啊!@ aw04绝对是
theapache64 '18年

对我来说,这是nodejs somefile.js因为我已经安装了nodejs软件包
user2490003,18年

这是2019年的正确答案。Node.JS始终是最普遍且最简单的方法。
wilsonhobbs

10

我知道您问过有关Linux和Mac的问题。如果Windows感兴趣的其他人找到您的问题,我将为Windows提供答案。

Windows包含可从命令行使用的Javascript引擎。

自Windows 98以来,所有版本的Windows都包含名为“ Windows脚本主机 ”的东西。这是支持脚本“引擎”的Windows标准方法。从第一个版本开始,WSH支持Microsoft的Javascript版本JScript。除其他外,这意味着您可以从Windows命令行调用任何* .js文件的名称,该文件将在JScript引擎中运行。(通过wscript.exe或cscript.exe)

您会看到以下问题: IE9的Javascript引擎(代号为“ Chakra”)的ProgId或CLSID是什么,以了解如何从cscript.exe调用性能更高的IE9 Javascript引擎。


8

自从没有人提到它:从Java 1.6开始Java JDK还捆绑了JavaScript命令行和REPL。

它基于Rhino:https//developer.mozilla.org/en/docs/Rhino

在Java 1.6和1.7中,命令称为jrunscriptjrunscript.exe在Windows上),可以在JDK的bin文件夹中找到。

从Java 1.8开始,捆绑了一个新的JavaScript实现(Nashorn:https://blogs.oracle.com/nashorn/

因此,在Java 1.8中,该命令称为jjsjjs.exe在Windows上)


6

FWIW,node.js带有外壳,请尝试输入:

node-repl

一旦安装了node.js即可看到它的运行效果。安装rlwrap使其正常工作是很标准的。


我发现node-repl以及使用hash-bang都非常适合使快速程序与NodeJS一起使用。它快速且易于使用。
Cyber​​Fonic


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

我发现这个非常漂亮的,完全兼容C的,符合ECMAScript开源标准的JS引擎称为duktape

Duktape是一个可嵌入的Javascript引擎,专注于可移植性和紧凑的外观。

祝好运!



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.