javascript - मैं अपनी स्क्रिप्ट को node.js REPL में कैसे लोड करूं?




read-eval-print-loop (7)

मेरे पास एक स्क्रिप्ट foo.js है जिसमें कुछ फ़ंक्शन शामिल हैं जिन्हें मैं REPL में खेलना चाहता हूं।

क्या मेरे स्क्रिप्ट को नोड निष्पादित करने का कोई तरीका है और फिर सभी घोषित ghci foo.hs साथ एक आरईपीएल में कूदें, जैसे कि मैं python -i foo.py ghci foo.hs या ghci foo.hs साथ कर सकता ghci foo.hs ?


आपके द्वारा वर्णित सटीक कार्यक्षमता प्रदान करने के लिए अभी भी कुछ भी अंतर्निहित नहीं है। हालांकि, उपयोग करने के लिए एक विकल्प को आरईपीएल के भीतर .load कमांड का उपयोग करने की require है, जैसे:

.load foo.js

यह लाइन को लाइन से लाइन में लोड करता है जैसे कि आपने इसे आरपीएल में टाइप किया था। इसके विपरीत आपके द्वारा लोड किए गए आदेशों के साथ आरईपीएल इतिहास को प्रदूषित करने की require नहीं है। हालांकि, इसका पुनरावर्तनीय होने का लाभ है क्योंकि यह require कैश नहीं require

जो आपके लिए बेहतर है आपके उपयोग के मामले पर निर्भर करेगा।

संपादित करें: इसमें सीमित प्रयोज्यता है क्योंकि यह सख्त मोड में काम नहीं करता है, लेकिन तीन साल बाद मैंने सीखा है कि यदि आपकी स्क्रिप्ट में 'use strict' नहीं है 'use strict' , तो आप आरपीएल इतिहास को प्रदूषित किए बिना अपनी स्क्रिप्ट लोड करने के लिए eval का उपयोग कर सकते हैं :

var fs = require('fs');
eval(fs.readFileSync('foo.js').toString())

एक और तरीका उन कार्यों को वैश्विक रूप से परिभाषित करना है।

global.helloWorld = function() { console.log("Hello World"); }

फिर फ़ाइल को आरपीएल में प्रीलोड करें:

node -r ./file.js

फिर समारोह helloWorld सीधे helloWorld जा सकता है।


फ़ाइल को एक इंटरैक्टिव नोड प्रतिलिपि में क्यों लोड नहीं करें?

node -h
-e, --eval script          evaluate script
-i, --interactive          always enter the REPL even if stdin

node -e 'var client = require("./build/main/index.js"); console.log("Use `client` in repl")' -i

फिर आप पैकेज.जेसन स्क्रिप्ट में जोड़ सकते हैं

"repl": "node -e 'var client = require(\"./build/main/index.js\"); console.log(\"Use `client` in repl\")' -i",

नोड v8.1.2 का उपयोग कर परीक्षण किया


मैं हमेशा इस आदेश का उपयोग करता हूं

node -i -e "$(< yourScript.js)"

बिना किसी पैकेज के पाइथन में बिल्कुल काम करता है।


मैंने Vorpal.js बनाया है, जो आपके नोड को एक इंटरैक्टिव सीएलआई में जोड़कर इस समस्या को संभालता है। यह एक आरईपीएल एक्सटेंशन का समर्थन करता है, जो आपको अपने चल रहे ऐप के संदर्भ में एक आरईपीएल में छोड़ देता है।

var vorpal = require('vorpal')();
var repl = require('vorpal-repl');

vorpal
  .delimiter('myapp>')
  .use(repl)
  .show()
  .parse(process.argv); 

फिर आप ऐप चला सकते हैं और यह एक आरईपीएल में गिर जाएगा।

$ node myapp.js repl
myapp> repl: 

वर्तमान में आप सीधे ऐसा नहीं कर सकते हैं, लेकिन आप mylib = require('./foo.js') कर सकते हैं। याद रखें विधियों को निर्यात किया जाता है, ग्लोबल्स के रूप में घोषित नहीं किया जाता है।


जॉर्ज के उत्तर का एक बैश फ़ंक्शन संस्करण यहां दिया गया है :

noderepl() {
    FILE_CONTENTS="$(< $1 )"
    node -i -e "$FILE_CONTENTS"
}

यदि आप इसे अपने ~/.bash_profile में डालते हैं तो आप इसे उपनाम की तरह उपयोग कर सकते हैं, यानी:

noderepl foo.js




read-eval-print-loop