在新版本的节点中,node-inspector是内置的,可以使用命令node --inspect index.js
触发。但是,这始终提供一个命令行,其中包含您必须插入地址栏的地址。我知道这可能不是最安全的#34;但有没有办法消除复制和粘贴步骤?
答案 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::Start
,PrintDebuggerReadyMessage
我没有看到在此代码中自动打开浏览器的任何功能(在编写v7.4时),但会建议以下其中一项:
答案 3 :(得分:4)
是!!使用Node.js V8 --inspector Manager (NiM) Chrome插件,当我运行node --inspect-brk app
旁注 - 使用Visual Studio Code进行调试变得轻而易举
答案 4 :(得分:2)
虽然这并没有专门回答问题,但这会使问题变得不那么重要 - 一旦连接,您就不需要重新连接。
我在这里尝试了所有建议和其他帖子e.g.但是我发现一旦主管监视器生成了新的GUID,调制解调器就永远不会重新连接 - 选项卡中的地址已过期。
但是我在Chrome(58)标准开发者窗格中找到了一个新链接,它打开了一个新的#34;无头&#34;无论应用程序如何重建/重新启动,它都会神奇地重新连接。
在主题下&gt;主要,您应该看到&#34;节点实例可用。连接&#34;
我发现新窗口不太可用,因为我更喜欢标签,但自动重新连接非常可靠,我会接受它!
我发现的唯一缺点就是它重新连接时会清除所有断点。
更新: 我发现如果你使用Chrome Debug&gt;下的“Connect”链接打开几个调试窗口,就可以解决重新加载时断点消失的问题。来源&gt;线程&gt;主要。它们中的大多数将是空白的,甚至不会在其中列出任何来源,但正确连接的那个将最终保留其书签。我不知道为什么这个黑客行事 - 我错误地发现了它。
同样this Hackernoon article讨论了这个问题,建议将the tool NIM作为解决方案,并对管理检查员进行一般性改进(Adrian Moisa在答案中也提出了建议)。
更新(08/2017)
似乎Chrome v60改变了DevTools for Node,将我描述的链接移动到JS dev工具左上方导航栏中的一个小绿框图标。
然而现在我的断点黑客不再有效,因为你无法再打开多个窗口。可悲的是,他们还没有解决消失的断点问题。所以现在我回到关闭它并每次重新打开它...这是非常烦人的,因为它甚至不记得它的窗口位置(我喜欢移动它以区别于前端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)
由于多种原因,这是不可能的。
答案 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