2010-05-31 47 views
120

Tôi đang xem xét lập trình Javascript mà không cần trình duyệt. Tôi muốn chạy script từ dòng X lệnh Linux hay Mac OS, giống như chúng tôi chạy bất kỳ ngôn ngữ kịch bản khác (ruby, php, perl, python ...)Thực thi JavaScript mà không cần trình duyệt?

$ javascript my_javascript_code.js 

Tôi nhìn vào con khỉ nhện (Mozilla) và v8 (Google), nhưng cả hai loại này đều được nhúng.

Có ai đang sử dụng Javascript làm ngôn ngữ kịch bản để được thực thi từ dòng lệnh không?

Nếu có ai đó tò mò tại sao tôi đang xem xét điều này, tôi đã poking xung quanh node.js. Hiệu suất của node.js làm cho tôi tự hỏi liệu javascript có thể là một ngôn ngữ kịch bản khả thi để xử lý dữ liệu lớn hay không.

+0

node.js là trình thông dịch dòng lệnh javascript phải không? – Nathan

+5

node.js không phải là một thông dịch viên, nó là một khung công tác không đồng bộ được xây dựng trên triển khai javascript V8 từ Google.Mặc dù tôi tin rằng interterpter javascript của V8 được bao gồm trong một nút cài đặt –

+1

Nếu trình thông dịch CLI của V8 trở nên phổ biến, nó có thể là một công cụ giảng dạy thực sự tốt. Tôi nghĩ việc học lập trình bằng JavaScript có thể khá thú vị. Lua có thể thành thật là lựa chọn tốt nhất ("lớp học" của JS gây nhầm lẫn cho mọi người), nhưng khả năng của JS được ném lên web sẽ hấp dẫn người nghiện. Tôi có thể thử này V8 CLI bản thân mình. – jasonmp85

Trả lời

43

tôi thấy related question này về chủ đề này, nhưng nếu bạn muốn liên kết trực tiếp, ở đây đó là:

  • Bạn có thể cài đặt Rhino như những người khác đã chỉ ra. This post cho thấy cách dễ dàng để thiết lập và chạy và cách đặt bí danh một lệnh để gọi nó dễ dàng
  • Nếu bạn đang sử dụng máy Mac, bạn có thể sử dụng JavaScriptCore, công cụ này sẽ gọi công cụ JavaScript của WebKit. Here's a post trên số điện thoại
  • Bạn cũng có thể sử dụng trình thông dịch V8 của Chome/Google. Here are instructions
  • JavaScript như OSA là thú vị bởi vì nó cho phép bạn (AFAIK) tương tác với các ứng dụng OS X kịch bản như thể bạn đang ở trong AppleScript (không có cú pháp khủng khiếp)

Tôi Node.js ngạc nhiên doesn' Tôi đến với một trình bao, nhưng tôi đoán nó thực sự giống như một máy chủ web gọi lại/định hướng dựa trên sự lựa chọn/quay, vì vậy có lẽ nó không cần bộ tính năng JS đầy đủ, nhưng tôi không quá quen thuộc với các hoạt động bên trong của nó .

Vì bạn có vẻ quan tâm đến node.js và vì nó dựa trên V8 nên tốt nhất bạn nên làm theo hướng dẫn về thiết lập môi trường V8 để có cơ sở nhất quán cho lập trình JavaScript của mình và V8 hầu như giống nhau, nhưng tôi không chắc chắn).

+0

liên kết thông dịch viên Chrome/Google V8 chính xác là những gì tôi đang tìm kiếm! Cảm ơn bạn! – Daniel

+2

NodeJS trong 0.1.101 có nút-repl cung cấp cho bạn quyền truy cập CLI vào môi trường. Thật tuyệt vời khi thử nghiệm/học JS. – CyberFonic

+0

Với nodejs v0.10.25 khi gõ Ubuntu, 'nodejs' trong terminal cho phép truy cập vào REPL. –

3

Bạn có thể muốn xem Rhino.

Các Rhino Shell cung cấp một cách để chạy các kịch bản JavaScript trong chế độ hàng loạt:

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

Vâng có JavaScript as OSA, tiện ích mà cung cấp JavaScript để thay thế cho AppleScript. Tôi đã sử dụng khoảng 10 năm trước đây, không biết nếu nó vẫn còn làm việc với các phiên bản hệ điều hành hiện tại

6

FWIW, Node.js đi kèm với một vỏ, hãy thử gõ vào:

node-repl 

một khi bạn đã cài đặt Node.js để xem nó trong hành động. Nó khá chuẩn để cài đặt rlwrap để làm cho nó hoạt động tốt.

+0

Tôi đang tìm nút-repl cũng như sử dụng băm-bang cả hai rất tốt trong việc nhanh chóng các chương trình làm việc với NodeJS. Nó nhanh chóng và dễ sử dụng. – CyberFonic

2

Tôi biết điều này là cũ nhưng bạn cũng nên thử Zombie.js. Trình duyệt không có đầu cực nhanh và lý tưởng để thử nghiệm!

10

Tôi biết bạn đã hỏi về Linux và Mac; Tôi sẽ cung cấp câu trả lời cho Windows, trong trường hợp những người quan tâm đến Windows tìm câu hỏi của bạn.

Windows bao gồm công cụ Javascript có thể được sử dụng từ dòng lệnh.

Tất cả các phiên bản của Windows, kể từ Windows 98, đã bao gồm một cái gì đó gọi là "The Windows Script Host". Đó là một cách tiêu chuẩn cửa sổ để hỗ trợ kịch bản "động cơ". Kể từ lần phát hành đầu tiên, WSH hỗ trợ JScript, phiên bản Javascript của Microsoft. Trong số những thứ khác, điều này có nghĩa rằng, từ một cửa sổ dòng lệnh, bạn chỉ có thể gọi tên của bất kỳ tập tin * .js, và nó sẽ chạy trong công cụ JScript. (thông qua wscript.exe hoặc cscript.exe)

Bạn có thể xem câu hỏi này: What is the ProgId or CLSID for IE9's Javascript engine (code-named "Chakra") để tìm hiểu cách gọi công cụ Javascript IE9 hiệu suất cao hơn từ cscript.exe.

52

trả lời chính

Vâng, để trả lời câu hỏi của bạn, nó có thể sử dụng JavaScript như là một "thường xuyên" ngôn ngữ kịch bản từ dòng lệnh, mà không có một trình duyệt. Vì những người khác chưa đề cập đến điều này, tôi thấy rằng điều này đáng nhắc đến:

Trên hệ thống dựa trên Debian (và điều này bao gồm Ubuntu, Linux Mint và aptosid/sidux, ít nhất), bên cạnh các tùy chọn cài đặt Rhino và những người khác đã đề cập, bạn có có các tùy chọn khác:

  • Cài đặt libmozjs-24-bin gói, trong đó sẽ cung cấp cho bạn cơ SpiderMonkey của Mozilla trên dòng lệnh như một đơn giản js24, có thể được sử dụng cũng như một thông dịch viên tương tác. (Tên 24 trong tên có nghĩa là nó tương ứng với phiên bản 24 của Firefox).

  • Cài đặt gói libv8-dev, gói này sẽ cung cấp cho bạn động cơ V8 của Google. Nó có, là một trong những ví dụ của nó, tệp /usr/share/doc/libv8-dev/examples/shell.cc.gz mà bạn có thể giải nén và biên dịch rất đơn giản (ví dụ: g++ -Os shell.cc -o shell -lv8).

  • Cài đặt gói nodejs và nó sẽ có sẵn cả hai như là thực thi nodejs và như một alternative (trong Debian cảm giác) để cung cấp các js thực thi. Việc biên dịch JIT được cung cấp theo lịch sự của V8.

  • Cài đặt gói libjavascriptcoregtk-3.0-bin và sử dụng trình thông dịch JavaScriptCore của WebKit (jsc) làm thông dịch viên thông thường từ dòng lệnh. Và điều này là không cần phải có quyền truy cập vào máy Mac. Trên nhiều nền tảng (ví dụ: x86 và x86_64), trình thông dịch này sẽ có trình biên dịch JIT.

Vì vậy, với hầu như không có trình biên dịch, bạn sẽ có ba trong số các công cụ JavaScript có trọng lượng nặng theo ý của mình.

Phụ Lục

Một khi bạn đã cài đặt mọi thứ, bạn chỉ có thể tạo ra các file với dòng công việc #!/usr/bin/js và mọi thứ sẽ chỉ làm việc:

$ 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! 
$ 
+1

+1 Giải pháp thứ hai rất đơn giản. Cảm ơn bạn! – Kevin

+0

hướng dẫn từ Google trên tòa nhà v8: https://developers.google.com/v8/build – Cheeso

17

Tôi đã cài đặt Node.js trên iMac và

node somefile.js 

trong bash sẽ hoạt động.

+0

wow điều này cần nhiều phiếu bầu hơn – aw04

7

Vì không ai đề cập đến nó: Vì Java 1.6 JDK Java cũng đi kèm với một dòng lệnh JavaScript và REPL.

Nó dựa trên Rhino: https://developer.mozilla.org/en/docs/Rhino

Trong Java 1.6 và 1.7 lệnh được gọi là jrunscript (jrunscript.exe trên Windows) và có thể được tìm thấy trong thư mục bin của JDK.

Bắt đầu từ Java 1.8 có đi kèm một thực hiện mới JavaScript (Nashorn: https://blogs.oracle.com/nashorn/)

Vì vậy, trong Java 1.8 lệnh được gọi là jjs (jjs.exe trên Windows)

2

tôi sử dụng Ubuntu 12.10 và js từ commandline

Nó có sẵn với cài đặt của tôi về java:

[email protected]:~/foo$ java -version 
java version "1.6.0_27" 
[email protected]:~/foo$ which js 
/usr/bin/js 

Một số ví dụ:

[email protected]:~/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!' ] 

Bầu trời là giới hạn, sau đó giữ chuột phải vào đi.

2

Tôi thấy điều này ECMAScript mã nguồn mở thực sự tiện lợi phù hợp JS động cơ hoàn toàn viết bằng C gọi duktape

Duktape là một động cơ Javascript nhúng , tập trung vào tính di động và dấu chân nhỏ gọn.

Chúc may mắn!

1

JSDB, khả dụng cho Linux, Windows và Mac phải phù hợp với hóa đơn khá tốt. Nó sử dụng công cụ Javascript Spidermonkey của Mozilla và có vẻ ít rắc rối khi cài đặt so với node.js (ít nhất là lần cuối tôi thử node.js một vài năm trước).

Tôi đã tìm thấy JSDB từ danh sách Javascript thú vị này: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Shells

Các vấn đề liên quan