Node.js 有没有办法让节点在会话之间保留命令行历史记录?

Node.js 有没有办法让节点在会话之间保留命令行历史记录?,node.js,read-eval-print-loop,Node.js,Read Eval Print Loop,当我在没有参数的情况下从命令行运行node时,我会输入一个交互式shell。如果执行一些命令、退出节点和重新启动节点,则向上箭头不起任何作用(我希望它滚动查看我以前的命令) 是否有一种方法可以交互调用node,以便它记住我的旧命令?您可以使用它将node.js REPL命令存储在历史文件中 首先,安装rlwrap(使用apt-get或brew等软件包管理器即可轻松完成) 然后为节点添加别名: alias node='env NODE_NO_READLINE=1 rlwrap node' 我在O

当我在没有参数的情况下从命令行运行
node
时,我会输入一个交互式shell。如果执行一些命令、退出节点和重新启动节点,则向上箭头不起任何作用(我希望它滚动查看我以前的命令)

是否有一种方法可以交互调用node,以便它记住我的旧命令?

您可以使用它将node.js REPL命令存储在历史文件中

首先,安装rlwrap(使用apt-get或brew等软件包管理器即可轻松完成)

然后为节点添加别名:

alias node='env NODE_NO_READLINE=1 rlwrap node'
我在OSX上,所以我将该别名添加到我的
~/.bash\u配置文件
文件中,并将通过
source~/.bash\u配置文件
重新加载我的bash\u配置文件。。我可以走了


希望这有帮助

我找到了一个不错的小项目,它解决了这个问题:

使用npm安装(
npm安装-g repl.history

然后在命令行上运行
repl.history

我喜欢dreampulse和badsyntax答案的组合。通过repl.history,再加上对.bash_概要文件的添加,我得到了我期望的行为,即在节点交互shell中突出显示命令历史和语法,但在使用参数调用时绕过repl(以运行脚本)

然后编辑~/.bash_配置文件,添加:

function node(){
    if test "$#" -lt 1; then repl.history
    else env node $@; fi; }
现在重新启动shell或运行
~/。bash_profile
你就可以开始了


正在运行

$ node
将打开repl.history节点js交互式shell,然后

$ node program.js [...]

将按预期使用节点运行program.js。

io.js 2.0包括对的支持

历史记录的最大长度可以使用
节点\u REPL\u history\u SIZE
设置,默认值为1000


在io.js 3.0+中,默认情况下启用REPL history,而
NODE\u REPL\u history\u文件
被弃用,取而代之的是
NODE\u REPL\u history
(默认值:
~/.NODE\u REPL\u history
)。

节点本机支持此功能

在节点REPL中时,只需发出以下命令来保存历史记录:

$> .save ./file/to/save.js

还要检查用户主目录中的file.node\u repl\u历史记录。

到目前为止,您尝试了什么?我使用了(不正确的)命令:
rlwrap node
,对于node REPL没有保存我的历史记录感到沮丧。这解决了我的问题!虽然rlwrap会使您失去漂亮的节点repl颜色。此外,制表符完整性仅供参考,但dreampulse的答案会保留颜色和制表符完整性。:)此方法保留repl颜色和制表符完成。耶@SamH编辑不应以任何方式更改或扩展原始答案。它们只是为了澄清语法、拼写、格式等。这部分是因为编辑是由社区批准的,而不是您正在编辑的帖子的所有者。如果你有建议,它们属于评论或你自己的答案。请参阅:我为它创建了一个别名,如@badsyntax:
alias iojs='env NODE\u REPL\u HISTORY\u FILE=$HOME/.NODE\u HISTORY iojs'
env NODE_REPL_HISTORY_FILE=$HOME/.node_history iojs
$> .save ./file/to/save.js