【问题标题】:What is the node.js analog of python -i: run and enter interactive mode?python -i的node.js模拟是什么:运行并进入交互模式?
【发布时间】:2014-06-08 21:11:44
【问题描述】:

在 python 中有一个很好的特性,python -i。比如python -i myprogram.py会运行程序然后进入交互模式,就好像我把整个程序粘贴到了交互shell中一样。

node.js中有类似的命令吗?

【问题讨论】:

标签: node.js


【解决方案1】:

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

-r, --require module

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

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

node -i -r ./myprogram.js

-e, --eval "script"

将以下参数计算为 JavaScript。这些模块是 在 REPL 中预定义的也可以在脚本中使用。

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

这些功能自 2014 年的上一次响应中添加了以下拉取请求。

【讨论】:

  • 有什么方法可以从 REPL 访问所需的模块?
【解决方案2】:

我认为节点可执行文件不允许您将 -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}"

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

nodejs ./demo.js

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

【讨论】:

  • 我发现这种方法有一些缺点。脚本中的局部变量不可用于检查,但全局变量可用于检查。
  • @SergeyOrshanskiy 我已经编写了一个新版本的程序,它将您的脚本加载到当前会话中,而不仅仅是需要模块。这应该有效。
【解决方案3】:

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

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

cat ./test.js - | node -i

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

【讨论】:

    【解决方案4】:

    你可以进入nodeJS然后使用.load /path/file.js命令将文件导入到当前node js程序中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      • 2022-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多