在python中有一个很好的功能,python -i
.例如,python -i myprogram.py
将运行该程序,然后进入交互模式,就像我已将整个程序粘贴到交互式shell中一样.
node.js中是否有类似的命令?
我认为节点可执行文件不允许您将-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>
。
文档位于https://nodejs.org/api/cli.html
在启动时预加载指定的模块.
遵循require()的模块解析规则.模块可以是文件的路径,也可以是节点模块名称.
node -i -r ./myprogram.js
将以下参数评估为JavaScript.REPL中预定义的模块也可以在脚本中使用.
node -i -e "console.log('A message')"
自2014年上一次响应以来,已添加了这些功能,并提供了以下请求.
不幸的是,节点没有为此提供内置解决方案。正如这里提到的,您可以使用该-r
选项预加载模块,但您仍然无法从 REPL 访问它们,这使它有点无用。
到目前为止,我发现的最好的解决方法是做
cat ./test.js - | node -i
Run Code Online (Sandbox Code Playgroud)
其中 test.js 是您要运行的文件。这会通过标准输入发送它,就像您自己输入文件然后等待其他输入一样。一个缺点是它会在命令提示符中将文件和每一行的结果回显给您。
归档时间: |
|
查看次数: |
2491 次 |
最近记录: |