2011-01-31 41 views
16

Có ai đã thiết lập một cái gì đó như thế này cho chính mình bằng cách sử dụng REPL hiện tại node.js không? Tôi đã không nghĩ ra một cách nhanh chóng để làm điều đó.node.js - đánh giá quá trình trực tiếp

Cách tôi làm điều đó hôm nay là sử dụng emacs và điều này: https://github.com/ivan4th/swank-js

Module này bao gồm:

  1. Một SLIME-js addon để emacs đó, kết hợp với js2-mode , cho phép bạn chỉ cần phát hành CMx ở đâu đó trong phần thân của chức năng def - và tắt chuỗi chức năng của ..

  2. Máy chủ Swank-js (có, bạn c đánh giá từ máy cục bộ của bạn trực tiếp đến quy trình từ xa) được viết bằng Node.js - Nó nhận được chuỗi của hàm bạn đã đánh giá và thực sự evals nó

  3. Toàn bộ phần cho phép bạn kết nối với cổng trên máy chủ đó với trình duyệt của bạn và sau đó cho phép bạn thao tác DOM trên trình duyệt mà (đó là khá tuyệt vời nhưng không có liên quan)

giải pháp của tôi sử dụng SLIME-js ở phía emacs vÀ tÔI yêu cầu (' swank- js ') trên tệp app.js của tôi

Bây giờ .. Tôi có một số vấn đề và câu hỏi liên quan đến giải pháp của mình hoặc các vấn đề khác có thể:

Q1: Việc này có quá mức không? Có ai đó có một cách bí mật để đánh giá công cụ từ nano vào quá trình trực tiếp của mình không?

Q2: Tôi đã phải thay đổi cách phô trương-js được EVALing .. nó được sử dụng một số loại ma thuật đen như thế này:


var Script = process.binding('evals').Script; 
var evalcx = Script.runInContext; 
.... 
this.context = Script.createContext(); 
for (var i in global) this.context[i] = global[i]; 
this.context.module = module; 
this.context.require = require; 
... 
r = evalcx("CODECODE", this.context, "repl"); 

đó, như xa Tôi hiểu, chỉ cần sao chép các biến toàn cục để các ngữ cảnh mới, và khi eval, không thay đổi chức năng gốc định nghĩa - SOOO .. Tôi chỉ sử dụng đồng bằng "eval" và CNTT WORKS.

Bạn có bất kỳ nhận xét nào về vấn đề này không?

Q3: Để đánh giá lại hàm, hàm cần phải là hàm GLOBAL - Thực tiễn không tốt để có tất cả định nghĩa hàm là toàn cục (giống như đinh)? Bạn có nghĩ rằng có một cách khác để làm điều này?

+0

Trên thực tế, tôi khá quan tâm đến việc câu hỏi này là tốt .. Tôi nghi ngờ rằng chơi xung quanh với ma thuật đen trong đó có thể warrent một số câu trả lời. Tôi biết những gì tôi sẽ làm hôm nay! –

Trả lời

2

Trên thực tế, swank.js là nhận được tốt hơn, và bây giờ là dễ dàng hơn để thiết lập phô trương js với dự án của bạn sử dụng NPM. Tôi đang trong quá trình viết tài liệu ngay bây giờ, nhưng chức năng là có!

0

Bạn có thể xem jsapp.us, chạy JS trong một hộp cát, và sau đó cho thấy rằng với thế giới như là một máy chủ thử nghiệm nhanh chóng. Đây là số jsapp.us github repo.

Ngoài ra, dừng lại vào #node.js và đặt câu hỏi cho một phản ứng nhanh hơn :)

2

Kiểm tra này ra http://nodejs.org/api/vm.html

var util = require('util'), 
vm = require('vm'), 
sandbox = { 
    animal: 'cat', 
    count: 2 
}; 

vm.runInNewContext('count += 1; name = "kitty"', sandbox, 'myfile.vm'); 
console.log(util.inspect(sandbox)); 

// { animal: 'cat', count: 3, name: 'kitty' } 

nên giúp bạn rất nhiều, tất cả những thứ sandbox cho nút sử dụng nó :) nhưng bạn có thể sử dụng nó trực tiếp :)

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