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

osa*_*osa 10 node.js

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

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

Edw*_*rzo 8

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

这可能不是您想要阅读的解决方案。但是,这对我有用。有一个叫做 REPL 的模块,基本上可以让你手动完成。所以,我意识到我可以为任何文件创建一个包装器,如下所示:

#!/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}"
Run Code Online (Sandbox Code Playgroud)

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

nodejs ./demo.js
Run Code Online (Sandbox Code Playgroud)

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


her*_*ere 6

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

-r, - 需要模块

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

遵循require()的模块解析规则.模块可以是文件的路径,也可以是节点模块名称.

node -i -r ./myprogram.js

-e, - eval"script"

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

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

自2014年上一次响应以来,已添加了这些功能,并提供了以下请求.

  • -r xxx.js 不能使用xxx.js中定义的var (2认同)

Ant*_*ony 6

不幸的是,节点没有为此提供内置解决方案。正如这里提到的,您可以使用该-r选项预加载模块,但您仍然无法从 REPL 访问它们,这使它有点无用。

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

cat ./test.js - | node -i
Run Code Online (Sandbox Code Playgroud)

其中 test.js 是您要运行的文件。这会通过标准输入发送它,就像您自己输入文件然后等待其他输入一样。一个缺点是它会在命令提示符中将文件和每一行的结果回显给您。