如何禁用"特殊命令"在node.js REPL?

时间:2015-06-13 09:07:04

标签: javascript node.js console read-eval-print-loop

问题节点REPL有一些"special commands",例如.break.save。我从不使用这些,但我非常经常尝试粘贴到这样格式化的REPL代码中:

words.append('ul')
    .classed('my-class', true)
    .selectAll('li.new-class')
    .data((tuple, tupleIdx) => obj[tupleIdx])
    .enter()
    .append('li')
    .classed('new-class', true)
    .text(d => '' + foo(d));

(这是d3.js代码,但是当使用Promises时会发生类似的事情,这是从每一行开始的.then(...)链。)

当然节点抱怨"无效的REPL关键字"当它在自己的行上看到.classed.then时,会在几个屏幕上打印一系列错误消息。

脆弱的伪解决方法我在Vim中使用正则表达式解决了这个问题,它将关闭parens和点之间的任何空格移动到点之后(:%s/)\n\(\s*\)\./).\r\1/为完整性)但是这很乏味,我经常想从浏览器中复制粘贴,而不是切换到Vim来重新格式化一些代码。

问题有没有办法禁用节点REPL"功能"虽然善意,但与标准JavaScript实践冲突,例如以点开头的行?

或者这对于终端应用程序来说太复杂了,如果是这样,有没有办法通过浏览器的JS控制台(而不是node-monkey只能处理{{1}来与节点REPL进行通信}})

PS。此问题主要是关于以console.log开头的行,但另一个此类冲突是.(感谢n_)。

1 个答案:

答案 0 :(得分:0)

这里有一些尝试:使用node-copy-paste,我写了一个小模块,允许我paste()剪贴板的内容和eval修复以{开头的行{1}}。

这是.

paste.js

然后在节点REPL中,var cp = require('copy-paste'); // npm install node-copy-paste module.exports = function() { return eval(cp.paste().replace(/\n\s*\./g, ".")); }; 将使它继续。非常脆弱但它可能通常足以解决问题。