2016-12-30 86 views
37

在新版本的节点中,node-inspector是内置的,可以使用命令node --inspect index.js来触发。但是,这总是提供一个命令行,您必须将地址插入地址栏。我知道这可能不是最“安全”的,但有没有办法消除复制和粘贴步骤?我可以让node --inspect自动打开Chrome

+0

你学会了如何做到这一点?我正在寻找相同的答案。我使用nodemon和webpack热重新加载,我一直松开检查器连接。 –

+0

@AdrianMoisa看看我的答案。 – Ali

+0

http://june07.com/nim http://june07.com/inspect-broke-my-workflow已经表明,但该工具很好地完成了这项工作。 – 667

回答

5

有一个单独的工具可以做到这一点,称为inspect-process,但没有内置的支持。

据我所看到的,(C++)代码,在开始检查以及输出调试消息是在这里:

https://github.com/nodejs/node/blob/master/src/inspector_socket_server.cc

具体的功能,InspectorSocketServer::StartPrintDebuggerReadyMessage

我没有看到任何功能在此代码中自动打开浏览器(在编写v7.4时),但会提示以下其中一项:

  1. 打开这里https://github.com/nodejs/node/issues
  2. 功能请求自己实现的功能,并提交一个PR
  3. 使用inspect-process
+0

它正在工作。 debug-brk也可以工作。 inspect --debug-brk index.js – Rob

6

我正在寻找同样的问题的答案,我发现了两个不错的工具:

NIM看起来更加先进,它能够自动检测节点实例,它对我当前的设置起到非常好的作用。我使用nodemon在文件发生更改时自动重新启动节点服务器。除此之外,我还安装了带HMR(Hot模块重新加载)的Webpack,我的文件夹总数覆盖范围为/public/server。我花了2周的时间学习如何设置,但现在它开始取得成功。

npm install -g nodemon 
npm install -g ts-node // In case you use typescript 

nodemon.json

{ 
    "verbose": false, 
    "watch": ["server/**/*.ts"], 
    "ext": "ts js json", 
    "ignore": ["server/**/*.spec.ts"], 
    "exec": "set DEBUG=app:*,-not_this & ts-node --inspect --debug-brk server/main.ts" 
} 

set DEBUG=app:*,-not_this用于从Visionmedia debug

使能输出(!)目前还an issuedebug()在Chrome检查为不打印文本,但是至少在命令行中可以看到文本。我使用命令行来查看调试语句和检查器来展开对象。

编辑

同时,我发现了一个比较难看的修复,但我做这项工作,部分...颜色元数据被忽略,更糟糕它在字符串渲染。所以这会严重影响可读性。但是,嘿...我有一些原木出来,然后什么都没有。

我最近遇到的另一个问题是NIM没有正确连接。最后,我想通了,我需要输入实际的IP地址127.0.0.1在NIM配置面板,而不是localhost

debugOff它只是一个简易的方式有日志暂时关闭,直到我回来需要他们。

// Debug 
let debugOff = (...any: any[]) => { }, debug = require('debug')('vs:ServerApp'); 

// Workaround for debug working with node inspector in chrome 
let Debug = require('debug'); 
Debug.log = console.log.bind(console); 


/** 
* Listen for incoming requests 
*/ 
public listen(): void { 
    debug('Start server'); 
    debugOff('Server port:', SERVER.port); // This would be usually too verbose 
0

由于多种原因,这是不可能的。

  1. 启动Chrome(或其他“桌面”应用程序)取决于平台。核心节点无法做到这一点,它会增加不必要的复杂性(例如,想想发现安装位置,处理未安装的Chrome等)。
  2. 这将绑节点到浏览器,这是不期望的。
  3. Chrome不提供一种方法来从命令行中传递devtools URL。
+0

你说的是完全正确的,但回答完全不同的问题。我们可以让Chrome发现活动的节点会话,而不是让节点处理产生的Chrome实例。 – jpeltoniemi

+0

@Pichan Chrome已经做到了。 – Eugene

+0

我的观点正是如此。 – jpeltoniemi

31

在铬60+有(在devtools以及node.js的图标,同时节点正在运行)的项目在URL chrome://inspect/#devices“开放专用DevTools为节点”,打开的检查窗口将连接到节点.js一旦启动或重新启动,因此无需每次都手动打开它。

+0

感谢您的提示!这真棒,有一个Node.js的内置调试支持。辉煌。 – Zoltan

+1

@Zoltan欢迎您,我认为它是在第57版中推出的。 – Ali

+5

这很棒,但有没有办法在开发过程中断开开发工具?在我的过程结束时,我在控制台上“等待调试器断开连接......”并且必须“Ctrl + c”或关闭dev-tools窗口才能返回。 –

2

虽然这不是特别是回答这个问题,它使问题不太相关 - 一旦连接,你不需要重新连接。

我尝试了这里的所有建议和其他帖子e.g.,但是我发现一旦supervisor watch生成了一个新的GUID,调试中的选项卡就不会重新连接 - 该选项卡中的地址已过时。

但是我发现在Chrome(58)标准开发面板新的链接,打开一个新的“无头”窗口,并重新连接神奇无论应用如何重建/重新启动。

在线程>主,你应该看到“可用节点的实例。连接”。 enter image description here

我发现新窗口不太可用,因为我更喜欢一个选项卡,但自动重新连接是如此可靠我会忍受!

我发现的唯一缺点是它重新连接时会清除所有断点。

更新: 我发现如果使用Chrome Debug> Sources> Threads> Main下的“Connect”链接打开几个调试窗口,则可以解决重新加载时断点问题。他们中的大多数将是空白的,甚至没有任何其他来源,但是正确连接的来源最终会保留其书签。我不知道为什么这个黑客行得通 - 我错误地发现了它。

另外this Hackernoon article讨论了这个问题,建议使用the tool NIM作为解决方案,并对管理检查员进行了总体改进(也由Adrian Moisa在答复中提出)。

更新(08/2017)

看来Chrome的V60已更改节点的DevTools,动我的JS开发工具左上角的导航栏描述一个绿色的小盒子图标链接。 Node Devtool icon

但是现在我的断点破解不再起作用,因为你不能再打开多个窗口。可悲的是,他们还没有解决消失的断点问题。所以现在我又回到了关闭它并重新打开它的每一次......这是额外的烦人,因为它甚至不记得它的窗口位置(我喜欢将它与前端JS调试窗口区分开来同时使用全堆栈......),也没有关闭所有这些源文件选项卡的事实(现在我会停止咆哮)。

2

是的!使用Node.js V8 --inspector Manager (NiM) Chrome的插件,它会打开Chrome的自动的,当我运行node --inspect-brk app

在一个侧面说明 - 与Visual Studio代码调试已经成为一种微风

0

现在,在现代铬(我有V64,不知道低版本),在Chrome控制台键入

chrome.send('open-node-frontend') 

打开一个窗口,自动连接到处理的NodeJS
(也可以通过chrome://inspect

您还可以启动和关闭检查编程
(见

或者使用kill -USR1 $PID的文档https://nodejs.org/dist/latest/docs/api/inspector.html),其中$PID是您的节点进程的PID
(但我不知道如何阻止它,并且它不可能指定主机和端口,它将使用localhost:9229

相关问题