当我node
从不带参数的命令行运行时,我进入了一个交互式 shell。如果我执行一些命令、退出节点并重新启动节点,向上箭头不会做任何事情(我希望它滚动浏览我以前的命令)。
有没有办法可以交互地调用节点,以便它记住我的旧命令?
当我node
从不带参数的命令行运行时,我进入了一个交互式 shell。如果我执行一些命令、退出节点并重新启动节点,向上箭头不会做任何事情(我希望它滚动浏览我以前的命令)。
有没有办法可以交互地调用节点,以便它记住我的旧命令?
您可以使用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
,我很高兴!
希望这可以帮助!
我找到了一个不错的小项目,它解决了这个问题:
使用 npm ( npm install -g repl.history
) 安装并repl.history
在命令行上运行。
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
。
同时检查用户主目录中的 .node_repl_history 文件。
我喜欢 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。