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文件.我很高兴去!
希望这可以帮助!
我喜欢 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。
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.
Node 本身就支持这一点。
在节点 REPL 中时,只需发出以下命令即可保存历史记录:
$> .save ./file/to/save.js
Run Code Online (Sandbox Code Playgroud)