2011-01-31 14 views
16

क्या किसी ने मौजूदा node.js REPL का उपयोग करके खुद के लिए ऐसा कुछ स्थापित किया था? मैंने ऐसा करने का एक त्वरित तरीका नहीं सोचा था।node.js - एक लाइव प्रक्रिया के लिए eval'ing

तरह से मैं आज यह करना Emacs और इस का उपयोग कर रहा है: https://github.com/ivan4th/swank-js

इस मॉड्यूल से बना है:

  1. एक कीचड़-js ऐड-ऑन Emacs करने के लिए जो, js2-मोड के साथ संयोजन में , की सुविधा देता है आप बस एक CMX कहीं एक समारोह के मुख्य भाग में डीईएफ़ जारी - और बंद करने के लिए समारोह का स्ट्रिंग चला जाता है ..

  2. स्वांक-js सर्वर (हाँ, तुम ग ould eval अपने स्थानीय मशीन से सीधे एक दूरस्थ प्रक्रिया के लिए) Node.js में लिखा - यह समारोह आप eval'ed की स्ट्रिंग प्राप्त करता है और वास्तव में यह

  3. एक पूरे हिस्सा आप दूसरे से कनेक्ट करने देता है कि evals अपने ब्राउज़र के साथ कि सर्वर पर बंदरगाह और फिर भी आप अपने ब्राउज़र पर डोम (जो बहुत अद्भुत लेकिन प्रासंगिक नहीं है) उनमें परिवर्तन कर सकते

मेरे समाधान Emacs तरफ कीचड़-js का उपयोग करता है और मैं की आवश्यकता होती है (' swank- जेएस ') मेरी app.js फ़ाइल पर

अब .. मेरे समाधान या अन्य संभावित लोगों के बारे में मेरे पास कई मुद्दे और प्रश्न हैं:

प्रश्न 1: क्या यह अधिक हो रहा है? क्या किसी के पास नैनो से अपनी लाइव प्रक्रिया में सामान निकालने का एक गुप्त तरीका है?

Q2: मैं जिस तरह से स्वांक-js EVALing है बदलना पड़ा .. इसे इस तरह काला जादू के कुछ तरह इस्तेमाल किया:


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"); 

जो, जहाँ तक मैं समझता हूँ, बस प्रतियां वैश्विक चर करने के लिए नया संदर्भ, और eval पर, मूल फ़ंक्शन परिभाषाओं को नहीं बदलता है - सूओ .. मैं सिर्फ सादे "eval" और आईटी वर्क्स का उपयोग कर रहा हूं।

क्या आपके पास इस बारे में कोई टिप्पणी है?

प्रश्न 3: किसी फ़ंक्शन को फिर से निकालने के लिए, इसे एक वैश्विक कार्य होना चाहिए - क्या सभी कार्य परिभाषाओं को वैश्विक (क्लोजर-जैसी) के रूप में रखना गलत व्यवहार है? क्या आपको लगता है कि ऐसा करने का दूसरा तरीका है?

+0

, मैं कर रहा हूँ यह प्रश्न भी .. मुझे संदेह है कि वहां काले जादू के साथ खेलना कुछ जवाबों को वारंट कर सकता है। मुझे पता है कि मैं आज क्या करने जा रहा हूं! –

उत्तर

2

वास्तव में, swank.js काफी बेहतर हो रही है के लिए प्रश्न पूछें, और यह अब ज्यादा अपनी परियोजना NPM उपयोग करने के साथ स्वांक js स्थापित करने के लिए आसान है। मैं अभी दस्तावेज लिखने की प्रक्रिया में हूं, लेकिन कार्यक्षमता वहां है!

0

आप jsapp.us पर एक नज़र डाल सकते हैं, जो एक सैंडबॉक्स में जेएस चलाता है, और उसके बाद इसे एक त्वरित छोटे परीक्षण सर्वर के रूप में दुनिया में उजागर करता है। यहां jsapp.us github repo है।

इसके अलावा, #node.js में बंद करो और एक तेज प्रतिक्रिया :)

2

चेक इस बाहर काफी में रुचि 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' } 

आप बहुत मदद चाहिए, नोड के लिए सैंडबॉक्स चीजों के सभी इसे इस्तेमाल करता है :) लेकिन आप इसे सीधे वास्तव में उपयोग कर सकते हैं :)

संबंधित मुद्दे