当我从没有参数的命令行运行node
时,我输入了一个交互式shell。如果我执行一些命令,退出节点,并重新启动节点,向上箭头不会执行任何操作(我希望它滚动浏览我以前的命令)。
有没有办法可以交互式调用节点,以便记住我的旧命令?
答案 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)
我找到了一个很好的小项目,解决了这个问题:
使用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
答案 5 :(得分:0)
还要检查用户主目录中的.node_repl_history文件。