问题节点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_)。
答案 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, "."));
};
将使它继续。非常脆弱但它可能通常足以解决问题。