Executing JavaScript without a browser?
Main Answer
Yes, to answer your question, it is possible to use JavaScript as a "regular" scripting language from the command line, without a browser. Since others have not mentioned it yet, I see that it is worth mentioning:
On Debian-based systems (and this includes Ubuntu, Linux Mint, and aptosid/sidux, at least), besides the options of installing Rhino and others already mentioned, you have have other options:
Install the
libmozjs-24-bin
package, which will provide you with Mozilla's Spidermonkey engine on the command line as a simplejs24
, which can be used also as an interactive interpreter. (The24
in the name means that it corresponds to version 24 of Firefox).Install the
libv8-dev
package, which will provide you Google's V8 engine. It has, as one of its examples, the file/usr/share/doc/libv8-dev/examples/shell.cc.gz
which you can uncompress and compile very simply (e.g.,g++ -Os shell.cc -o shell -lv8
).Install the package
nodejs
and it will be available both as the executablenodejs
and as an alternative (in the Debian-sense) to provide thejs
executable. JIT compilation is provided as a courtesy of V8.Install the package
libjavascriptcoregtk-3.0-bin
and use WebKit's JavaScriptCore interpreter (jsc
) as a regular interpreter from the command-line. And this is without needing to have access to a Mac. On many platforms (e.g., x86 and x86_64), this interpreter will come with a JIT compiler.
So, with almost no compilation you will have three of the heavy-weight JavaScript engines at your disposal.
Addendum
Once you have things installed, you can simply create files with the #!/usr/bin/js
shebang line and things will just work:
$ 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!
$
I found this related question on the topic, but if you want direct links, here they are:
- You can install Rhino as others have pointed out. This post shows an easy way to get it up and running and how to alias a command to invoke it easily
- If you're on a Mac, you can use JavaScriptCore, which invokes WebKit's JavaScript engine. Here's a post on it
- You can use Chome/Google's V8 interpreter as well. Here are instructions
- The JavaScript as OSA is interesting because it lets you (AFAIK) interact with scriptable OS X apps as though you were in AppleScript (without the terrible syntax)
I'm surprised node.js doesn't come with a shell, but I guess it's really more like an epoll/selector-based callback/event-oriented webserver, so perhaps it doesn't need the full JS feature set, but I'm not too familiar with its inner workings.
Since you seem interested in node.js and since it's based on V8, it might be best to follow those instructions on getting a V8 environment set up so you can have a consistent basis for your JavaScript programming (I should hope JSC and V8 are mostly the same, but I'm not sure).
I have installed Node.js on an iMac and
node somefile.js
in bash will work.
I know you asked about Linux and Mac; I am going to provide the answer for Windows, in case other people who are interested in Windows find your question .
Windows includes a Javascript engine that can be used from the command line.
All versions of Windows, since Windows 98, have included something called "The Windows Script Host". It's a windows-standard way to support script "engines". Since the first release, WSH supports JScript, Microsoft's version of Javascript. Among other things, this means that, from a windows command line, you can just invoke the name of any *.js file, and it will run in the JScript engine. (via either wscript.exe or cscript.exe)
You can see this question: What is the ProgId or CLSID for IE9's Javascript engine (code-named "Chakra") to learn how to invoke the higher-performance IE9 Javascript engine from cscript.exe.