打开来自node –inspect命令的标准输出
好吧,这里有一个有趣的,我们得到以下stdout:
Debugger listening on port 9229. Warning: This is an experimental feature and could change at any time. To start debugging, open the following URL in Chrome: chrome-devtools://devtools/remote/serve_file/@60cd6e859b9f557d2312f5bf532f6aec5f284980/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:9229/a7a2a58d-dfd1-4cc6-875c-47da78adeb1b
当我们像这样运行一个命令:
node --inspect --debug-brk bin/www.js
我正在考虑创build一个这样的bash脚本:
#!/usr/bin/env bash NODE_DEBUG_OUTPUT=$(node --inspect --debug-brk bin/www.js) open -a "/Applications/Google Chrome.app"/ getUrl(${NODE_DEBUG_OUTPUT})
但这里是我的bash技能结束的地方 – 我如何实现getUrl
函数,以便我可以从输出中获取URL?
我非常确定,如果我们将bash传递给open函数,它将打开浏览器,在这种情况下,它必须是Google Chrome浏览器。
这是一个bash命令来提取url
url=$(grep 'chrome-devtools://' <(node --inspect bin/www.js $@ 2>&1))
说明
-
2>&1
告诉shell将stderrredirect到stdout。 -
node
命令在<(node
)内运行,这称为进程replace ,其行为类似于只读文件,其内容是命令的标准输出(本例中为node
)
其他事宜
-
有一个错误,最近提交Chrome DevTools自7.5.0以来无法连接到节点检查
-
据报道,7.4.0版本正常工作
-
要从命令行打开chrome-devtools url需要一些AppleScript,幸运的是有人已经这样做了:
chrome-node-devtools-refresh.sh
所以命令会是这样的:
chrome-node-devtools-refresh.sh $(grep 'chrome-devtools://' \ <(node --inspect bin/www.js $@ 2>&1))
替代
所以我可能不会回答你的问题,但我想给你一个更简单的解决scheme,解决你正在解决的更高难题。
有一个名为node-inspector
的npm
包。 这个软件包提供了你需要从chrome dev-tools获得的相同function。 这里是他们的github页面的描述:
Node Inspector是使用Blink Developer Tools(以前称为WebKit Web Inspector)的Node.js应用程序的debugging器接口。
你如何安装?
npm install -g node-inspector
你如何使用?
node-debug app.js
app.js
是你的js文件。 你可以在你的情况下做node-debug bin/www
它有什么作用?
这是一个GIF为你显示它的function
概要
node-inspector
包可以帮助你实现你想要的function。 即启动Chrome来debugging你的JS代码。 我觉得这是一个更简单的select。 你也可以阅读更多关于这个来探索额外的用例,如果你有
从这个包的开发者:
node-debug命令将在您的默认浏览器中加载Node Inspector。
注:节点检查器仅适用于Chrome和Opera。 如果另一个浏览器是您的默认Web浏览器(例如Safari或Internet Explorer),您必须在其中一个浏览器中重新打开检查器页面。 “节点检查器”与Chrome开发人员工具几乎完全相同。 阅读优秀的DevTools概述开始。
这真的很接近! 唯一不起作用的是chrome实际上并没有打开一个url,只是打开google.com
export PATH=$PATH:/Applications/Google\ Chrome.app/Contents/MacOS/ (node --inspect --debug-brk bin/www.js $@ &> debug-server.log) & sleep 1; // wait for the stdout to get written to file... LINE=$(grep -n "chrome-devtools" debug-server.log | awk '{print $2}') echo " => Supposed chrome-devtools link => '$LINE'"; Google\ Chrome "${LINE}"
任何人都知道为什么“Google \ Chrome”命令不会打开作为第一个参数提供的URL?