什么是Python的i的node.js模拟:运行并进入交互模式?

在Python中有一个很好的function, python -i 。 例如, python -i myprogram.py将运行该程序,然后进入交互模式,就像我将整个程序粘贴到交互式shell中一样。

在node.js中是否有类似的命令?

我认为节点可执行文件不允许将-i与任何其他文件参数结合使用。

这可能不是您想要阅读的解决scheme。 不过,这对我有效。 有一个名为REPL的模块,基本上可以让你手动执行。 所以,我意识到我可以创build一个包装任何文件,如下所示:

 #!/bin/bash COMMAND=$(cat <<EOF (function(){ var repl = require('repl'); process.stdin.push('.load ${1}\n'); repl.start({ useGlobal:true, ignoreUndefined:true, prompt:'> ' }); })(); EOF ) node -e "${COMMAND}" 

假设你调用这个脚本nodejs ,那么我可以调用这个脚本来做类似的事情

 nodejs ./demo.js 

它以编程方式启动REPL并将脚本加载到其中。 这相当于手动打开REPL会话,然后运行命令.load <file>

文档位于https://nodejs.org/api/cli.html

-r, – 需要模块

在启动时预加载指定的模块。

遵循require()的模块parsing规则。 模块可以是文件path,也可以是节点模块名称。

node -i -r ./myprogram.js

-e,–eval“脚本”

将以下参数作为JavaScript进行评估。 在REPL中预定义的模块也可以在脚本中使用。

node -i -e "console.log('A message')"

自2014年以前的响应中添加了这些function,并提供了以下请求。

不幸的是节点没有这个内置的解决scheme。 正如在这里提到的,你可以用-r选项预装载模块,但是你仍然不能从REPL访问它们,这使得它有点无用。

到目前为止,我find的最好的解决方法是做

 cat ./test.js - | node -i 

其中test.js是你想运行的文件。 这通过stdin发送它,就好像你自己input了文件,然后等待额外的input。 一个缺点是它将在命令提示符下将文件和每行的结果回显给您。