Javascript 如何在保留所有环境的情况下挂起节点REPL并在稍后阶段恢复?
我希望暂停REPL会话,以便关闭系统,然后在以后的时间继续处理REPL会话,就好像我从未关闭过它一样,也就是说,不必失去所有环境 我认为可能的解决办法是Javascript 如何在保留所有环境的情况下挂起节点REPL并在稍后阶段恢复?,javascript,node.js,read-eval-print-loop,Javascript,Node.js,Read Eval Print Loop,我希望暂停REPL会话,以便关闭系统,然后在以后的时间继续处理REPL会话,就好像我从未关闭过它一样,也就是说,不必失去所有环境 我认为可能的解决办法是 快照内存,保存到文件,稍后从文件加载env:我认为这将是最简洁的解决方案,就像使用Windows的“休眠”功能一样。我发现了这个实用程序,它旨在拍摄内存快照以分析内存泄漏,但我不知道是否可以从该快照中恢复整个环境,而且我还没有找到这样做的工具 保存命令并重放它们:此方法的一个主要缺点是,它只适用于像var x=“Hello World”这样的简
var x=“Hello World”这样的简单操作代码>,它不适用于var reciptId=bankAccount.makePayment(1000)代码>因为它将在每次重播时重复操作,而不是保存原始函数调用的详细信息
var f=函数(x){…};
变量a={};
a、 f=f;
a、 f==f//如果序列化机制分别为f和a.f保存函数defn并分别反序列化它们,则为true,而不是true
循环引用可能不起作用(x={};x.cyclic=x;
…)。因此,如果这种方法有效,将需要大量的脏活npm安装-g nesh
只需键入nesh
即可在终端中启动nesh。在任何其他REPL会话中都可以正常工作,如果要保存,可以在nesh中键入以下命令将REPL历史记录保存到给定文件:
。保存
在下一个REPL会话中,即使在关机后,也可以通过键入以下内容重新启动nesh会话并重新加载历史记录:
.load
这将重新评估整个历史文件,并使任何变量或函数在当前REPL/nesh会话中可用
希望这对您有所帮助,并且我认为它满足您的需要。我认为您正在寻找的是如何暂停和恢复进程 将它放在虚拟机中,并对其进行快照/存储/恢复。如果您愿意,您甚至可以“远程”连接到虚拟机。在任何情况下,我不相信解决方案存在于node中,而是有一个通用的操作系统实用程序将进程置于停滞状态。但是如果我关闭计算机,我不会失去VM吗?或者快照和恢复是否意味着从磁盘保存和检索?是的,虚拟机可以保存到磁盘。CRIU是否可以作为替代方案?它是一个Linux工具,可以让您对正在运行的应用程序/进程进行快照,将快照保存到磁盘,然后在以后恢复应用程序/进程。它在构建在Linux之上的Windows和OS X上不起作用。我自己还没有尝试过,但我知道Tonic,web上的可视节点REPL,谈到了运行节点REPL的快照。他们使用Virtualbox和CRIU方法进行比较。很棒的read@Snore,这篇文章讨论了我在问题中列出的所有三种方法,Bergi讨论过的一种,然后还有一种!看起来他们的REPL实现具有我所要求的功能,尽管我还没有亲自尝试过。请形成一个关于t的答案