Es ist immer noch nichts eingebaut, um die genaue Funktionalität bereitzustellen, die Sie beschreiben. Eine Alternative zur Verwendung require
, um den .load
Befehl in der REPL zu verwenden, wie z.
.load foo.js
Es lädt die Datei zeilenweise so, als hätten Sie sie in die REPL eingegeben. Im Gegensatz require
dazu verschmutzt der REPL-Verlauf mit den von Ihnen geladenen Befehlen. Es hat jedoch den Vorteil, dass es wiederholbar ist, da es nicht wie zwischengespeichert ist require
.
Was für Sie besser ist, hängt von Ihrem Anwendungsfall ab.
Edit: Es begrenzte Anwendbarkeit hat , weil es keine Arbeit im Strict - Modus der Fall ist, aber drei Jahre später habe ich gelernt , dass , wenn Ihr Skript nicht 'use strict'
, können Sie verwenden eval
das Skript zu laden , um ohne die REPL Geschichte zu verschmutzen:
var fs = require('fs');
eval(fs.readFileSync('foo.js').toString())
Ich benutze immer diesen Befehl
funktioniert genau wie in Python ohne Pakete.
quelle
Ich habe Vorpal.js erstellt , das dieses Problem löst , indem Ihr Knoten in eine interaktive CLI umgewandelt wird. Es unterstützt eine REPL-Erweiterung, mit der Sie im Kontext Ihrer laufenden App in eine REPL versetzt werden.
Dann können Sie die App ausführen und sie wird in eine REPL eingefügt.
quelle
Eine andere Möglichkeit besteht darin, diese Funktionen als global zu definieren.
Laden Sie dann die Datei in der REPL wie folgt vor:
Dann
helloWorld
kann direkt in der REPL auf die Funktion zugegriffen werden.quelle
Ich habe ein Replpad erstellt, da ich es satt hatte, das Skript wiederholt neu zu laden .
Einfach installieren über:
npm install -g replpad
Verwenden Sie es dann, indem Sie Folgendes ausführen:
replpad
Wenn Sie möchten, dass alle Dateien im aktuellen und in allen Unterverzeichnissen überwacht und bei Änderungen in die Repl-Datei übertragen werden, gehen Sie wie folgt vor:
replpad .
Schauen Sie sich die Videos auf der Website an, um eine bessere Vorstellung davon zu bekommen, wie es funktioniert, und lernen Sie einige andere nette Funktionen kennen, die es wie diese hat:
dox()
Funktion, die jeder Kernfunktion hinzugefügt wird, auf die Dokumente des Kernmoduls in der Replfs.readdir.dox()
dox()
Funktion, die jedem über npm installierten Modul hinzugefügt wird, auf die Readmes des Benutzermoduls in der Antwort zumarked.dox()
src
Eigenschaft, die jeder Funktion hinzugefügt wird, d. hexpress.logger.src
.talk
Befehl).append
Befehl wieder an die Datei anSiehe: https://github.com/thlorenz/replpad
quelle
CXX=clang++ npm install replpad
den Fehlerg++: error: unrecognized command line option '-stdlib=libc++'
# # Fatal error in ../deps/v8/src/api.cc, line 1248 # Check failed: !value_obj->IsJSReceiver() || value_obj->IsTemplateInfo(). # Illegal instruction: 4
Warum nicht die Datei in eine interaktive Knotenreplikation laden?
Dann können Sie package.json-Skripte hinzufügen
getestet mit Knoten v8.1.2
quelle
node -i -r "./build/main/index.js"
?Derzeit können Sie das nicht direkt tun, aber Sie können
mylib = require('./foo.js')
in der REPL. Denken Sie daran, dass Methoden exportiert und nicht als global deklariert werden.quelle
.load my_work.js
, obwohl einige zusätzlicheexports.working_var = ...
Deklarationen erforderlich sind , da die REPL einige Arten von perfekt gültigem Javascript wie mehrzeilige Kommentare (zumindest bei meinerreadline
Konfiguration) blockiert .replpad
ist cool, aber für eine schnelle und einfache Möglichkeit, eine Datei in einen Knoten zu laden, ihre Variablen zu importieren und eine Replikation zu starten, können Sie den folgenden Code am Ende Ihrer .js-Datei hinzufügenWenn Ihre Datei nun ausgeführt wird
src.js
,node src.js
wird der Knoten gestartet, die Datei geladen, eine REPL gestartet und alle alsvar
oberste Ebene deklarierten Objekte sowie alle exportierten Globals kopiert. Dieif (require.main === module)
sorgt dafür , dass dieser Code nicht ausgeführt werden , wennsrc.js
durch eine inbegriffenerequire
Erklärung. Tatsächlich können Sie jeden Code hinzufügen, der ausgeführt werden soll, wenn Siesrc.js
eigenständig zu Debugging-Zwecken innerhalb derif
Anweisung ausgeführt werden.quelle
Hier ist eine Bash-Funktionsversion von Georges Antwort :
Wenn Sie dies in Ihr
~/.bash_profile
eingeben, können Sie es wie einen Alias verwenden, dh:quelle
Ein weiterer Vorschlag, den ich hier nicht sehe: Probieren Sie dieses kleine Stück Code aus
Dann können Sie dieses Skript einfach ausführen und es wird
foo
als Variable enthaltenquelle
Alte Antwort
Öffnet den Knoten REPL und gibt alle Zeilen von test.js in REPL ein. Aus irgendeinem Grund wird der Knoten jedoch nach dem Ende der Datei beendet
Ein weiteres Problem ist, dass Funktionen nicht gehisst werden.
Bessere Antwort
Dann sind alle in var2.2.s ohne var deklarierten Globals in der REPL verfügbar
Ich bin mir nicht sicher, warum var a im globalen Bereich nicht verfügbar ist
quelle