Wie kann der Knoten REPL angehalten und zu einem späteren Zeitpunkt fortgesetzt werden, wobei die gesamte Umgebung erhalten bleibt?

Ich möchte eine REPL-Sitzung unterbrechen, damit ich das System herunterfahren und dann zu einem späteren Zeitpunkt an der REPL-Sitzung weiterarbeiten kann, als ob ich sie niemals geschlossen hätte, d. H. Ohne die gesamte Umgebung verlieren zu müssen.

Ich denke, dass die möglichen Lösungen dafür sein könnten

Snapshot-Speicher, in Datei speichern und env später aus Datei laden: Ich denke, dies wäre die sauberste Lösung, wie es passiert, wenn Sie die Funktion "Ruhezustand" von Windows verwenden. Ich habe dieses @ gefund heapdump Hilfsprogramm, das einen Speicher-Snapshot zur Analyse von Speicherlecks erstellen soll, aber ich weiß nicht, ob Sie die gesamte Umgebung aus diesem Snapshot wiederherstellen können, und ich habe keine Tools gefunden, die dies tun.

Befehle speichern und wiedergeben: Ein großes Manko dieser Methode ist, dass sie für einfache Dinge wie @ funktioniervar x = "Hello World";, es würde nicht funktionieren für Dinge wievar reciptId = bankAccount.makePayment(1000);, da Aktionen bei jeder Wiedergabe wiederholt werden, anstatt die Details des ursprünglichen Funktionsaufrufs zu speichern.

Serialize / Deserialize die gesamte Umgebung: Dazu müsste eine Liste aller Objekte erstellt werden, die in der Umgebung vorhanden sind, und anschließend ein Mechanismus erstellt werden, mit dem jedes Objekt in eine Datei geschrieben, d. H. Serialisiert und anschließend deserialisiert und bei Bedarf geladen wird. Ich bin noch nicht in der Lage, eine saubere Methode zum Serialisieren und Deserialisieren von js-Variablen ohne Einschränkungen zu finden. Ich denke, die Hauptbeschränkung dieser Methode ist die Unfähigkeit, Referenzen beizubehalten, so dass die Objekte ihre Klasse verlieren, Dinge bei der Serialisierung dupliziert werden müssten und bei der Deserialisierung ihre Gleichheit verlieren - z.var f = function (x) {...}; var a = {}; a.f = f; a.f === f? //is true, not true if your serialization mechanism saves a function defn for f and a.f separately and deserializes them separately und zyklische Referenzen würden wahrscheinlich nicht funktionieren x = {}; x.cyclic = x; ...). Wenn diese Methode jemals funktionieren sollte, würde sie viel Drecksarbeit erfordern.

So ist die Frage wirklich, wie schwierig es ist, das zu erreichen, was ich erreichen möchte? Was könnten andere Lösungen dafür sein? Gibt es ein großes Hindernis für das Erreichen dieses Ziels, das ich übersehen habe?

Auch gibt es Alternativen zum Node Repl-Programm (wie eine Konsole in einem Browser), diekönne wie folgt suspendiert werden?

Verbunden

Swift REPL: Wie speichere / lade ich den REPL-Status? (a.k.a. Suspend / Resume, Snapshot, Clone)

Antworten auf die Frage(4)

Ihre Antwort auf die Frage