在 Node.js 服务器运行时执行 运行 命令?
Running commands while a Node.js server is live?
有没有办法在 Node.js 服务器运行时(在启动后)执行 运行 命令并访问所有 functions/variables/etc?
例如,
在 运行 宁 node server.js
之后,有没有办法可以通过命令行在实时环境中执行函数或 运行 命令?
基本上,听起来您正在寻找 Node.js 相当于 browser-hosted JavaScript.
可用的浏览器控制台
Node.js 没有直接提供(它确实有一个 REPL 可以满足您的需求;请参阅 ),但是许多 IDE 都包含一个“调试控制台”(这就是 VS Code调用它)或类似的,你可以在调试模式下 运行ning 代码时使用。您可以检查全局变量(当然,您在 Node.js 应用程序中往往不会有很多全局变量,它们本质上是模块化的),调用全局函数(相同),更多的是与当前范围交互时在断点处暂停。
您也可以 运行 Node.js 直接使用调试标志,告诉它允许调试器附加到它。例如:
node --inspect-brk server.js
...在启用调试的情况下告诉 Node.js 到 运行。您会看到类似这样的内容:
Debugger listening on ws://127.0.0.1:9229/89eff679-76ac-4972-9bd9-3142214c0b1f
For help, see: https://nodejs.org/en/docs/inspector
如果您打开 Chromium-based 浏览器并转到 URL chrome://inspect
,您将看到列出的目标:
Target (v16.13.2) trace
index.js
file:///path/to/server.js
inspect
...其中 inspect
是 link。单击它,devtools 将打开,显示您的代码,并且执行在代码最开头的自动断点处停止。 (如果不想从断点开始,可以使用 --inspect
而不是 --inspect-brk
。)
您可以随时使用 the repl
core module 启动 REPL。使用 useGlobal
你可以共享全局范围,使用 context
你可以传入你需要的任何本地上下文:
import repl from 'repl'
const r = repl.start({ useGlobal: true })
r.context.someStuff = 123 // will be accessible as someStuff in REPL
然后您会在控制台中收到通常的提示,您可以与其交互以执行 运行 命令和查看变量。它 运行 与您的应用程序在同一进程中,因此您可以 import/require 模块并访问它们的导出等,它们的数据将与您的其余代码共享。
如果您想在代码中的某个特定点插入它并获得对局部变量的完全访问权限,您可以使用调用 JavaScript 的 [=15] 的自定义 eval
函数=] 在本地范围内:
repl.start({
eval: (cmd, context, filename, callback) => {
with (context) callback(null, eval(cmd))
}
})
(注意:有了这个,使用 let
定义新变量将无法跨命令工作。)
要在程序化 REPL 中也获取历史记录,您可以查看 repl-story
或类似的包。
如果您想通过 Web 浏览器远程访问类似的控制台(小心 - 安全风险 - 最好仅通过 SSH 端口转发提供),请查看 node-browser-repl
。
如果您正在寻找完整的调试器体验,请查看 如何将 DevTools 附加到 node.js 应用程序。
有没有办法在 Node.js 服务器运行时(在启动后)执行 运行 命令并访问所有 functions/variables/etc?
例如,
在 运行 宁 node server.js
之后,有没有办法可以通过命令行在实时环境中执行函数或 运行 命令?
基本上,听起来您正在寻找 Node.js 相当于 browser-hosted JavaScript.
可用的浏览器控制台Node.js 没有直接提供(它确实有一个 REPL 可以满足您的需求;请参阅
您也可以 运行 Node.js 直接使用调试标志,告诉它允许调试器附加到它。例如:
node --inspect-brk server.js
...在启用调试的情况下告诉 Node.js 到 运行。您会看到类似这样的内容:
Debugger listening on ws://127.0.0.1:9229/89eff679-76ac-4972-9bd9-3142214c0b1f For help, see: https://nodejs.org/en/docs/inspector
如果您打开 Chromium-based 浏览器并转到 URL chrome://inspect
,您将看到列出的目标:
Target (v16.13.2) trace index.js file:///path/to/server.js inspect
...其中 inspect
是 link。单击它,devtools 将打开,显示您的代码,并且执行在代码最开头的自动断点处停止。 (如果不想从断点开始,可以使用 --inspect
而不是 --inspect-brk
。)
您可以随时使用 the repl
core module 启动 REPL。使用 useGlobal
你可以共享全局范围,使用 context
你可以传入你需要的任何本地上下文:
import repl from 'repl'
const r = repl.start({ useGlobal: true })
r.context.someStuff = 123 // will be accessible as someStuff in REPL
然后您会在控制台中收到通常的提示,您可以与其交互以执行 运行 命令和查看变量。它 运行 与您的应用程序在同一进程中,因此您可以 import/require 模块并访问它们的导出等,它们的数据将与您的其余代码共享。
如果您想在代码中的某个特定点插入它并获得对局部变量的完全访问权限,您可以使用调用 JavaScript 的 [=15] 的自定义 eval
函数=] 在本地范围内:
repl.start({
eval: (cmd, context, filename, callback) => {
with (context) callback(null, eval(cmd))
}
})
(注意:有了这个,使用 let
定义新变量将无法跨命令工作。)
要在程序化 REPL 中也获取历史记录,您可以查看 repl-story
或类似的包。
如果您想通过 Web 浏览器远程访问类似的控制台(小心 - 安全风险 - 最好仅通过 SSH 端口转发提供),请查看 node-browser-repl
。
如果您正在寻找完整的调试器体验,请查看