我希望在使用IJavascript内核的Jupyter笔记本中创建一个NodeJS源文件,以便快速调试我的代码。工作完成后,即可使用Jupyter的“下载为...”功能将笔记本保存为NodeJS脚本文件。
我希望能够有选择地忽略/包含笔记本代码中的代码,这些代码在运行生成的NodeJS脚本文件时将不会执行。
我已经解决了为Python Jupyter笔记本做类似事情的问题,因为我可以确定代码是否在交互式会话中运行(IPython [REPL])。我通过在Python中使用此函数来完成此任务:
def is_interactive():
import __main__ as main
return not hasattr(main, '__file__')
是否可以为NodeJS做类似的事情?
答案 0 :(得分:0)
我不知道这是正确的方法,但找不到其他东西 基本上,如果您
try {
const repl = __dirname
} catch (err) {
//code run if repl
}
感觉有点,但可以工作\\ _(ツ)_ /¯
答案 1 :(得分:0)
最快,最可靠的途径就是查询流程参数。仅从NodeJS可执行文件中,有两种启动REPL的方法。在调用节点之后,您无需执行任何脚本即可执行 this 之类的操作。
node --experimental-modules ...
或者您使用interactive mode强制节点进入REPL。
node -i ...
在 v6.11.0 --
中添加的选项结束参数将永远不会将参数附加到process.argv
数组中,除非它在脚本模式下执行。通过FILE
,-p
或-e
。用于NodeJS的所有参数都将被过滤到随附的process.execArgv
变量中,因此process.argv
数组中剩下的唯一内容应该是process.execPath
。在这种情况下,我们可以将查询简化为以下解决方案。
const isREPL = process.execArgv.includes("-i") || process.argv.length === 1;
console.log(isREPL ? "You're in the REPL" : "You're running a script m8");
这不是最可靠的方法,因为任何用户都可以从启动器脚本实例化REPL,该脚本可用于运行该脚本。为此,我敢肯定,您可以使用人为错误来检索回溯并查找REPL条目。尽管我现在没有时间实施和确保该解决方案。