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

Bri*_*ian 23 node.js read-eval-print-loop

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

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

bad*_*tax 24

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

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

然后为节点添加别名:

alias node='env NODE_NO_READLINE=1 rlwrap node'
Run Code Online (Sandbox Code Playgroud)

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

希望这可以帮助!

  • 虽然rlwrap让你松散漂亮的节点repl颜色. (3认同)

dre*_*lse 16

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

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

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


Sam*_*att 5

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

npm install -g repl.history
Run Code Online (Sandbox Code Playgroud)

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

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

现在重新启动您的 shell 或运行. ~/.bash_profile即可。


正在运行

$ node
Run Code Online (Sandbox Code Playgroud)

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

$ node program.js [...]
Run Code Online (Sandbox Code Playgroud)

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


Iva*_*zik 5

io.js 2.0包括对持久REPL历史的支持.

env NODE_REPL_HISTORY_FILE=$HOME/.node_history iojs
Run Code Online (Sandbox Code Playgroud)

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

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


Sha*_*nak 5

Node 本身就支持这一点。

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

$> .save ./file/to/save.js
Run Code Online (Sandbox Code Playgroud)

参考:命令和特殊键


小智 5

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