打开来自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-inspectornpm包。 这个软件包提供了你需要从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?