Thực thi JavaScript mà không cần trình duyệt?


129

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 các tập lệnh từ dòng lệnh Linux hoặc Mac OS X, giống như chúng tôi chạy bất kỳ ngôn ngữ tập lệnh nào khác (ruby, php, perl, python ...)

$ javascript my_javascript_code.js

Tôi đã xem xét khỉ nhện (Mozilla) và v8 (Google), nhưng cả hai đều có vẻ như được nhúng.

Có ai 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 bất cứ ai là tò mò tại sao tôi nhìn vào điều này, tôi đã chọc xung quanh Node.js . Hiệu năng của node.js khiến tôi tự hỏi liệu javascript có thể là ngôn ngữ kịch bản khả thi để xử lý dữ liệu lớn hay không.


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à trình thông dịch, nó là khung async được xây dựng trên triển khai javascript V8 từ Google. Mặc dù tôi tin rằng trình xen kẽ javascript của V8 được bao gồm trong cài đặt nút

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

@ jasonmp85 thực thi các chức năng với một từ khóa mới xây dựng các thể hiện đối tượng. Khi bạn tham chiếu một thuộc tính / phương thức trên một cá thể, nếu bản thân đối tượng không có nó, thuộc tính nguyên mẫu của hàm tạo được kiểm tra. Sử dụng phương thức này cho các phương thức công khai và định nghĩa các vars cục bộ cho hàm constructor để có hiệu quả các phương thức / đạo cụ riêng (đây là các vars đóng cửa kỹ thuật). Kết thúc.
Erik Reppen

Câu trả lời:


46

Tôi tìm thấy câu hỏi liên quan này về chủ đề này, nhưng nếu bạn muốn liên kết trực tiếp, thì đây là:

  • Bạn có thể cài đặt Rhino như những người khác đã chỉ ra. Bài đăng này cho thấy một cách dễ dàng để khởi động và chạy và làm thế nào để 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, gọi công cụ JavaScript của WebKit. Đây là một bài viết trên đó
  • Bạn cũng có thể sử dụng trình thông dịch V8 của Chome / Google. Dưới đây là hướng dẫn
  • JavaScript như OSA rất thú vị vì nó cho phép bạn (AFAIK) tương tác với các ứng dụng OS X có thể tạo tập lệnh như thể bạn đang ở trong AppleScript (không có cú pháp khủng khiếp)

Tôi ngạc nhiên rằng node.js không đi kèm với 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 theo hướng sự kiện / gọi lại dựa trên epoll / selector, vì vậy có lẽ nó không cần bộ tính năng JS đầy đủ, nhưng tôi Tôi không quá quen thuộc với hoạt động bên trong của nó.

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


liên kết trình thông dịch 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 thay thế cho phép bạn truy cập CLI vào môi trường. Thật tuyệt vời khi thử nghiệm / học tập JS.
CyberFonic

Với nodejs v0.10.25 trên Ubuntu, gõ nodejsvào terminal cho phép truy cập REPL.
Иван Бишевац

Cái nào ở trên, nếu có, bao gồm HTML DOM?
Geezer cũ

57

Câu trả lời chính

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

Trên các 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à các tùy chọn khác đã được đề cập, bạn có các tùy chọn khác:

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

  • Cài đặt libv8-devgói, sẽ cung cấp cho bạn động cơ V8 của Google. Nó là một trong những ví dụ của nó, tập tin /usr/share/doc/libv8-dev/examples/shell.cc.gzmà 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 nodejsvà nó sẽ có sẵn cả dưới dạng thực thi nodejsthay thế (theo nghĩa của Debian) để cung cấp jstệp thực thi. Biên soạn JIT được cung cấp như một phép lịch sự của V8.

  • Cài đặt gói libjavascriptcoregtk-3.0-binvà sử dụng trình thông dịch JavaScriptCore của WebKit ( jsc) làm trình thông dịch 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ẽ đi kèm với trình biên dịch JIT.

Vì vậy, gần như không có phần biên dịch, bạn sẽ có ba trong số các công cụ JavaScript nặng theo ý của bạn.

Phụ lục

Khi bạn đã cài đặt mọi thứ, bạn chỉ cần tạo các tệp với #!/usr/bin/jsdòng shebang và mọi thứ sẽ chỉ hoạt động:

$ 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

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

node somefile.js

trong bash sẽ hoạt động.


CHÚA ƠI! @ aw04 Hoàn toàn
theapache64

đối với tôi, đó là nodejs somefile.jsvì tôi đã cài đặt gói nodejs
user2490003

đây là câu trả lời đúng trong năm 2019. Node.JS luôn là cách phổ biến nhất và đơn giản nhất để đi.
wilsonhobbs

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 khác quan tâm đến Windows tìm thấy câu hỏi của bạn.

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

Tất cả các phiên bản Windows, kể từ Windows 98, đã bao gồm một thứ gọi là " Máy chủ Windows Script ". Đó là một cách tiêu chuẩn của windows để hỗ trợ "engine" script. 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 là, từ một dòng lệnh windows, bạn có thể chỉ cần gọi tên của bất kỳ tệp * .js nào và nó sẽ chạy trong công cụ JScript. (thông qua wscript.exe hoặc cscript.exe)

Bạn có thể thấy câu hỏi này: ProgId hoặc CLSID cho công cụ Javascript của IE9 là gì (tên mã là "Luân xa") để tìm hiểu cách gọi công cụ Javascript IE9 hiệu suất cao hơn từ cscript.exe.


8

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 jrunscript( jrunscript.exetrê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ó một triển khai JavaScript mới (Nashorn: https://bloss.oracle.com/nashorn/ )

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


6

FWIW, node.js đi kèm với trình bao, hãy thử gõ vào:

node-repl

một khi bạn đã cài đặt node.js để xem nó hoạt động. Đó là tiêu chuẩn khá để cài đặt rlwrap để làm cho nó hoạt động độc đáo.


Tôi đang tìm kiếm nút thay thế cũng như sử dụng hàm băm rất tốt trong việc giúp các chương trình nhanh chóng hoạt động với NodeJS. Nó nhanh và dễ sử dụng.
CyberFonic

3

Bạn có thể muốn kiểm tra Rhino .

Rhino Shell cung cấp một cách để chạy các tập lệnh JavaScript trong chế độ hàng loạt:

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

3

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


3

Tôi sử dụng Ubuntu 12.10 và js từ dòng lệnh

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

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

Vài ví dụ:

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

Bầu trời là giới hạn, sau đó tiếp tục đi.



2

Tôi đã tìm thấy Công cụ JS tương thích ECMAScript mã nguồn mở thực sự tiện lợi này được viết hoàn toàn bằng C gọi là duktape

Duktape là một công cụ Javascript có thể 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

Vâng, có JavaScript là OSA , một phần mở rộng cung cấp JavaScript thay thế cho appleScript. Tôi đã sử dụng nó khoảng 10 năm trước, không biết liệu nó có còn hoạt động với các phiên bản HĐH hiện tại không


1

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

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.