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

时间:2013-08-29 13:02:26

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

当我从没有参数的命令行运行node时,我输入了一个交互式shell。如果我执行一些命令,退出节点,并重新启动节点,向上箭头不会执行任何操作(我希望它滚动浏览我以前的命令)。

有没有办法可以交互式调用节点,以便记住我的旧命令?

6 个答案:

答案 0 :(得分:24)

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

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

然后为节点添加别名:

alias node='env NODE_NO_READLINE=1 rlwrap node'

我在OSX上,所以我将该别名添加到我的~/.bash_profile文件中,然后通过source ~/.bash_profile重新加载我的bash_profile文件..我很高兴去!

希望这有帮助!

答案 1 :(得分:16)

我找到了一个很好的小项目,解决了这个问题:

  

https://www.npmjs.org/package/repl.history

使用npm(npm install -g repl.history)安装 并在命令行上运行repl.history

答案 2 :(得分:5)

io.js 2.0包括对persistent REPL history的支持。

env NODE_REPL_HISTORY_FILE=$HOME/.node_history iojs

可以使用NODE_REPL_HISTORY_SIZE设置历史记录的最大长度,默认值为1000。

在io.js 3.0+中,默认情况下会启用REPL历史记录,并且不推荐NODE_REPL_HISTORY_FILE使用NODE_REPL_HISTORY(默认值为~/.node_repl_history)。

答案 3 :(得分:4)

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

npm install -g repl.history

然后编辑〜/ .bash_profile,添加:

function node(){
    if test "$#" -lt 1; then repl.history
    else env node $@; fi; }

现在重启你的shell或运行. ~/.bash_profile,你就可以了。


正在运行

$ node

将打开repl.history nodejs交互式shell,并且

$ node program.js [...]

将按预期运行带有节点的program.js.

答案 4 :(得分:3)

Node原生支持这个。

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

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

Reference: Commands and Special Keys

答案 5 :(得分:0)

还要检查用户主目录中的.node_repl_history文件。