我可以获得node --inspect自动打开Chrome

时间:2016-12-30 15:52:13

标签: node.js

在新版本的节点中,node-inspector是内置的,可以使用命令node --inspect index.js触发。但是,这始终提供一个命令行,其中包含您必须插入地址栏的地址。我知道这可能不是最安全的#34;但有没有办法消除复制和粘贴步骤?

9 个答案:

答案 0 :(得分:43)

在Chrome 60+中,chrome://inspect/#devices url中有一个项目“打开专用的DevTools for Node”(以及节点运行时devtools中的node.js图标)已打开检查窗口一旦启动或重新启动就会连接到node.js,因此无需每次都手动打开它。

答案 1 :(得分:7)

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

NIM似乎更先进,它能够自动检测节点实例,这些实例在我当前的设置中非常好用。每当文件发生更改时,我都会使用nodemon自动重启节点服务器。除此之外,我使用HMR(热模块重新加载)设置Webpack,并且我完全覆盖了/public/server个文件夹。我花了两个星期的时间来学习如何设置,但现在它开始有所回报。

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 issue debug()没有在Chrome检查器中打印文本,但目前至少文本在命令行中可见。我使用命令行来查看调试语句和检查器来扩展对象。

修改

与此同时,我发现了一个相当丑陋的修复,但我完成了这项工作,部分是...颜色元数据被忽略,更糟糕的是它在字符串中呈现。所以它严重影响了可读性。但是嘿......我有一些日志出来了,更好的是什么都没有。

我最近遇到的另一个问题是NIM没有正确连接。最后我发现我需要在NIM配置面板中输入实际IP地址127.0.0.1而不是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

答案 2 :(得分: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. 打开功能请求
  3. 自己实施该功能并提交PR
  4. 使用inspect-process

答案 3 :(得分:4)

是!!使用Node.js V8 --inspector Manager (NiM) Chrome插件,当我运行node --inspect-brk app

时,它会自动打开Chrome

旁注 - 使用Visual Studio Code进行调试变得轻而易举

答案 4 :(得分:2)

虽然这并没有专门回答问题,但这会使问题变得不那么重要 - 一旦连接,您就不需要重新连接。

我在这里尝试了所有建议和其他帖子e.g.但是我发现一旦主管监视器生成了新的GUID,调制解调器就永远不会重新连接 - 选项卡中的地址已过期。

但是我在Chrome(58)标准开发者窗格中找到了一个新链接,它打开了一个新的#34;无头&#34;无论应用程序如何重建/重新启动,它都会神奇地重新连接。

在主题下&gt;主要,您应该看到&#34;节点实例可用。连接&#34; enter image description here

我发现新窗口不太可用,因为我更喜欢标签,但自动重新连接非常可靠,我会接受它!

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

更新: 我发现如果你使用Chrome Debug&gt;下的“Connect”链接打开几个调试窗口,就可以解决重新加载时断点消失的问题。来源&gt;线程&gt;主要。它们中的大多数将是空白的,甚至不会在其中列出任何来源,但正确连接的那个将最终保留其书签。我不知道为什么这个黑客行事 - 我错误地发现了它。

同样this Hackernoon article讨论了这个问题,建议将the tool NIM作为解决方案,并对管理检查员进行一般性改进(Adrian Moisa在答案中也提出了建议)。

更新(08/2017)

似乎Chrome v60改变了DevTools for Node,将我描述的链接移动到JS dev工具左上方导航栏中的一个小绿框图标。 Node Devtool icon

然而现在我的断点黑客不再有效,因为你无法再打开多个窗口。可悲的是,他们还没有解决消失的断点问题。所以现在我回到关闭它并每次重新打开它...这是非常烦人的,因为它甚至不记得它的窗口位置(我喜欢移动它以区别于前端JS调试窗口,我同时使用全栈...),也不是我已经关闭所有这些源文件标签的事实(我现在停止咆哮)。

答案 5 :(得分:2)

现在使用现代chrome (我有v64,不知道更低版本),输入

chrome.send('open-node-frontend')
Chrome控制台中的

打开一个窗口,自动连接到nodejs进程
(也可通过chrome://inspect访问)

您也可以以编程方式启动和关闭检查器 (请参阅文档https://nodejs.org/dist/latest/docs/api/inspector.html

或使用kill -USR1 $PID其中$PID是您的节点进程pid
(但我不知道如何阻止它,并且无法指定主机和端口,它将使用localhost:9229

答案 6 :(得分:2)

对于OSX用户,请使用brew install chrome-cli安装令人惊叹的chrome-cli

将其放入~/.bashrc

node-inspect() {
  local TAB_ID=`chrome-cli open 'chrome://inspect/#devices' -n | head -n 1 | awk '{ print $2 }'`
  sleep 0.5
  chrome-cli execute "document.getElementById('node-frontend').click()" -t $TAB_ID && chrome-cli close -t $TAB_ID
  node --inspect-brk $@
}

现在你可以:node-inspect ./server --foo --bar

答案 7 :(得分:1)

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

  1. 启动Chrome(或其他“桌面”应用程序)取决于平台。核心节点无法做到并且会增加不必要的复杂性(例如考虑发现安装位置,处理未安装的Chrome等)。
  2. 这会将Node绑定到Chrome,这是不可取的。
  3. Chrome不提供从命令行传递devtools URL的方法。

答案 8 :(得分:0)

npm install express
npm install esm
npm install open
npm install --save-dev node-key-sender

package.json

{
  "name": "open-browser",
  "version": "1.0.0",
  "description": "browser",
  "main": "server.js",
  "type": "module",
  "scripts": {
    "esm": "node -r esm server.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.17.1",
    "esm": "^3.2.25",
    "open": "^7.0.0",
  },
  "devDependencies": {
    "node-key-sender": "^1.0.11"
  }
}

server.js

import express from 'express'
import http from 'http'
import open from 'open'
import keysender from 'node-key-sender'

const webApp = express()
const webServer = http.createServer(webApp)

webServer.listen(3000, function(){
  console.log('> Server listening on port:',3000)
  open('http://localhost:3000')
  keysender.sendCombination(['control', 'shift', 'i'])
})

浏览器必须已经打开,然后运行

node -r esm server.js