25

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

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

4

6 回答 6

25

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

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

然后为节点添加别名:

alias node='env NODE_NO_READLINE=1 rlwrap node'

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

希望这可以帮助!

于 2013-08-29T14:38:08.137 回答
17

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

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

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

于 2014-03-03T15:31:43.993 回答
7

io.js 2.0 包括对持久性 REPL 历史记录的支持。

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

于 2015-05-06T20:31:55.420 回答
5

Node 本身就支持这一点。

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

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

参考:命令和特殊键

于 2018-04-22T03:20:36.060 回答
5

同时检查用户主目录中的 .node_repl_history 文件。

于 2018-12-07T08:02:21.797 回答
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。

于 2015-01-26T01:41:57.873 回答