我想暂停一个REPL会议,以便我可以关闭系统,然后在稍后的时间继续在REPL会议上工作,就好像我从来没有关闭过的一样,即不必失去所有的环境.

我认为可能的解决办法可能是

>快照内存,保存到文件,然后从文件加载env:我认为这将是最整洁的解决方案,就像使用Windows的“hibernate”功能时一样.我发现这个heapdump实用程序旨在为内存泄漏进行内存快照分析,但是我不知道是否可以从该快照中复制整个环境,并且没有找到任何这样的工具.
>保存命令并重播:这个方法的一个主要缺点是它适用于简单的东西,如var x =“Hello World”;它不适用于var reciptId = bankAccount.makePayment(1000);因为它将重复每个重播的操作,而不是保存原始函数调用的详细信息.
>对整个环境进行序列化/反序列化:这将包括在环境中存在的所有对象的列表,然后创建一个机制来将它们写入一个文件,即将其序列化,然后制作一个反序列化这些和加载的机制他们需要时我还没有看到一个干净的方法来序列化和反序列化js变量而不受限制.我认为这种方法的主要限制是它无法保留引用,所以这些对象松动了它们的类,事情在序列化时必须被重复,并且在反序列化时失去平等.

var f = function(x){…};
var a = {};
a.f = f;
a.f === f? //是true,如果你的序列化机制分别为f和a.f保存一个函数defn,并且反序列化它们

循环引用可能不起作用(x = {}; x.cyclic = x; …).所以这种方法,如果它有工作将需要很多肮脏的工作.

所以问题真的是,实现我想实现的难度有多大?可以做些其他的解决方案呢?是否有一个主要障碍,实现这一点,我俯瞰?

此外,还有可以像这样暂停的节点repl程序(像浏览器中的控制台)的任何替代方案?

相关:

> Swift REPL: how to save/load the REPL state? (a.k.a. suspend/resume,snapshot,clone)

解决方法

所以如果你想能够暂停一个REPL会话,然后拿起你关闭之后的地方似乎没有直接在Node.js的REPL中可用.最接近的是REPL中的持久历史功能,该功能在Node 4.2.1中被添加(我想).这将允许您以纯文本方式查看REPL中的命令的历史记录,但是可以使用Node可以使用的最接近的东西.

Persistent History

By default,the REPL will persist history between node REPL sessions by saving to a .node_repl_history file in the user’s home directory. This can be disabled by setting the environment variable NODE_REPL_HISTORY=””.

PrevIoUsly in Node.js/io.js v2.x,REPL history was controlled by using a NODE_REPL_HISTORY_FILE environment variable,and the history was saved in JSON format. This variable has Now been deprecated,and your REPL history will automatically be converted to using plain text. The new file will be saved to either your home directory,or a directory defined by the NODE_REPL_HISTORY variable,as documented below.

REPL模块的完整文档可用here.

但是,有一个REPL“包装”节点模块可以做你所要求的.您可以做的是将REPL历史记录保存到文件中,然后在下一个会话中加载历史文件,并访问您在下一个REPL会话中保存到该文件的内容.该模块是Nesh.它有很多其他功能包括配置您的外壳并评估不同版本的JS,如ES6 / ES7(使用Babel)和CoffeeScript的.

安装nesh:

npm安装-g nesh

通过简单地输入nesh,在终端上启动nesh.像您通常在任何其他REPL会话中一样工作,并且要保存时,可以在nesh中键入以下内容将REPL历史记录保存到给定文件:

.save< filepath>

在下一个REPL会话中,即使关闭,您也可以重新启动nesh会话并重新加载历史记录,方法是输入以下内容:

.load< filepath>

这将重新评估整个历史文件,并使任何变量或函数在当前的REPL / nesh会话中可用.

希望这是有帮助的,我认为它符合你的需要.

javascript – 如何暂停节点REPL并在后续阶段恢复所有的环境保留?的更多相关文章

  1. ios – CGPath和UIBezierPath()有什么区别?

    目前,我正在努力制作一个自定义按钮,我有一个图像,并具有坐标,但我发现您可以通过使用CGPath类或UIBezierPath创建一个按钮/对象类.有人可以告诉我两者有什么区别?解决方法CGPath是CoreGraphics库的不透明类型,而UIBezierPath是UIKit中的Obj-C类.UIBezierPath是一个围绕CGPath的包装,具有更加面向对象的界面和一些方便的方法.使用CGPath可能会略微更快,因为它不必经过Obj-C,并且它具有更高级的功能,如CGPathApply.重要的是,UI

  2. swift 快速奔跑的兔几 本节的内容是:序列化与反序列化

    在cocoa中,我们经常需要向磁盘保存数据块,cocoa将这些数据块表示为NSData对象例如,有一个字符串,将其转换为NSData,可以使用如下方法:我们还可以将对象转化为数据。遵守协议NSCoding的对象可以转换为NSData对象,也可以从NSData对象中加载,方法如下:

  3. Swift中一个类中的枚举enum类型的数据该如何实现序列化NSCoder

    简述昨天在开发中遇到了这样一个问题,需要用NSUserDefaults持久化一些数据,其中需要保存一个自己定义的类对象。结束其实枚举本来就是一个Int,因此我们将其声明为Int型就可以根据Int值初始化了,以此实现序列化和反序列化。

  4. swift json的序列化和反序列化

    还有一点东西没写完,权作笔记参考:http://www.hangge.com/blog/cache/detail_983.html

  5. Swift中对象序列化的实现

    Swift中对象序列化的实现在swift中要使某个类可以序列化,只需要类实现NSCoding协议,并实现协议中的一个必要的构造函数和一个方法,分别对应序列化和反序列化的二个过程。

  6. Alamofire 4.0 迁移指南

    原文:Alamofire4.0MigrationGuide作者:cnoon译者:kemchenj译者注:最近打算把公司项目迁移到Swift3.0,顺手把Alamofire4.0的迁移指南翻译了,之前虽然读过一部分源码,但还是看到了很多新东西,新的Adapter和Retrier我都打算用到项目里,希望大家看完也能够有收获.Alamofire4.0是Alamofire最新的一个大版本更新,一个基于Sw

  7. [HandyJSON] 在Swift语言中处理JSON - 转换JSON和Model

    而HandyJSON是其中使用最舒服的一个库,本文将介绍用HandyJSON来进行Model和JSON间的互相转换。而HandyJSON另辟蹊径,采用Swift反射+内存赋值的方式来构造Model实例,规避了上述两个方案遇到的问题。所以我们要定义一个Mapping函数来做这两个支持:就这样,HandyJSON完美地帮我们进行了JSON到Model类的转换。把Model转换为JSON文本HandyJSON还提供了把Model类序列化为JSON文本的能力,简直无情。

  8. 数组 – 在swift中存储对数组的引用

    我错过了一些允许我这样做的Swift构造吗?你必须使用NSArray或NSMutableArray,因为SwiftArrays是值类型,所以任何赋值都会复制.

  9. android – 如何在Realm for Java中将RealmObject序列化为JSON?

    也就是说,使用RealmObject并将其序列化为JSON?它还应该序列化该对象内的任何RealmList.解决方法来自英国的基督徒在这里.RealmforAndroid目前没有任何此类方法,虽然核心数据库实际上支持JSON序列化,所以现在你要么必须手动操作,要么使用像GSON这样的第三方工具然而).

  10. android – GSON反序列化自定义对象数组

    我正在尝试使用GSON在Android中序列化/反序列化JSON.我有两个类看起来像这样:和:我正在使用GSON来序列化/反序列化数据.我像这样序列化:这将生成如下所示的JSON:我这样反序列化:我打电话的时候收到错误.我不知道这个错误意味着什么.我不认为自己做了任何严重的错误.有帮助吗?解决方法将您的代码更改为:使用Interfaces是一个很好的做法,GSON要求.Gson将javascript中的数组“[]”转换为LinkedList对象.在您的代码中,GSON尝试在_users字段中注入一个Lin

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部