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

26
当我在命令行中运行node时,没有参数,我进入交互式shell。如果我执行了一些命令,退出node,然后重新启动node,向上箭头不会做任何事情(我希望它可以滚动我的先前命令)。
有没有一种方式可以调用node进行交互式操作,以便它记住我的旧命令?

你目前尝试了什么?node-shell 似乎具备许多功能。 - TC1
6个回答

26
你可以使用rlwrap来存储node.js REPL命令到历史记录文件中。
首先,安装rlwrap(可以使用像apt-get或brew等包管理器轻松完成)。
然后为node添加别名:
alias node='env NODE_NO_READLINE=1 rlwrap node'

我使用的是OSX系统,所以我将该别名添加到我的~/.bash_profile文件中,然后通过source ~/.bash_profile重新加载我的bash_profile文件..就可以了!

希望这可以帮到你!


我一直在使用(不正确的)命令:rlwrap node,并且对为什么Node REPL不能保存我的历史记录感到沮丧。这解决了我的问题! - Noah Sussman
3
虽然使用 rlwrap 会使得 node repl 的漂亮颜色失效。 - dentarg
还有标签自动完成。 - Daiwei
FYI,dreampulse的答案保留了颜色和制表符自动完成。 :) - Sam Hiatt

17

这种方法可以保留 REPL 颜色和制表符自动完成。耶! - Sam Hiatt
@SamH 编辑不应以任何方式更改或扩展原始答案。它们仅旨在澄清语法,拼写,格式等。这部分是因为编辑由社区而不是您正在编辑的帖子的所有者批准。如果您有建议,请在评论或您自己的答案中提出。请参见:http://meta.stackexchange.com/questions/11474/what-is-the-etiquette-for-modifying-posts - Ansel Santosa

8

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)。


我为此创建了一个别名,类似于@badsyntax:alias iojs ='env NODE_REPL_HISTORY_FILE = $ HOME / .node_history iojs' - Raine Revere

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

7

Node原生支持此功能。

在Node REPL中,只需输入以下命令即可保存历史记录:

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

参考:命令和特殊键


5

我喜欢dreampulse和badsyntax两位的答案结合在一起。通过repl.history,再加上对我的.bash_profile的修改,我得到了我期望的行为,即在node交互式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 [...]

将使用node运行program.js,如预期。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接