7 回答
要在调试中运行 grunt,您需要将 grunt 脚本显式传递给节点:
node-debug $(which grunt) task
并debugger;
在您的任务中添加一条线。node-inspector
然后将打开带有调试工具的浏览器。
编辑 2014 年 2 月 28 日
node-inspector
添加了命令node-debug
,该命令以某种状态启动节点--debug
并将浏览器打开到node-inspector
页面,当它到达第一debugger
行或设置断点时停止。
编辑 2015 年 1 月 30 日
在 Windows 上,事情要复杂一些。有关说明,请参阅@e.gluhotorenko 的答案。
视窗解决方案
跑
node --debug-brk c:\Users\username\AppData\Roaming\npm\node_modules\grunt-cli\bin\grunt taskname
从目录中的 cmd 与您的Gruntfile.js
. 不要忘记把debugger;
线放在必要的地方。
要调试,我们必须修改 bin 下的 grunt 文件。在我的机器上,grunt 是全局安装的,所以我去 /usr/local/lib/node_modules/grunt/bin 我打开文件并修改:
#!/usr/bin/env node
到
#!/usr/bin/env node --debug-brk
--debug-brk 将在运行的第一行 javascript 中断。
仅仅这样做是不够的,因为您将无法在节点检查器的下拉列表中找到您的 grunt task js 文件,因此您必须通过添加debugger;
where来修改您有兴趣调试的文件你希望断点发生。现在你可以在第一次休息后点击继续,你会在你的debugger;
线上休息
相当笨拙,但这是我迄今为止找到的唯一方法。
我最近创建了 grunt-node-inspector 以轻松配置 node-inspector 与您的其余 grunt 工作流程,请查看:https ://github.com/ChrisWren/grunt-node-inspector
这是 Gruntfile 的一部分,它说明了如何使用 grunt-node-inspector、grunt-concurrent 和 grunt-shell 调试 grunt 任务:https://github.com/CabinJS/Cabin/blob/master/Gruntfile。 js#L44-L77
我已经完成了运行我的应用程序并启动节点检查器的任务。它比当前的提议要好得多,您只需在 gruntfile 中添加此任务:
grunt.registerTask('debug', 'My debug task.', function() {
var done = this.async();
grunt.util.spawn({
cmd: 'node',
args: ['--debug', 'app.js'],
opts: {
//cwd: current workin directory
}
},
function (error, result, code) {
if (error) {
grunt.log.write (result);
grunt.fail.fatal(error);
}
done();
});
grunt.log.writeln ('node started');
grunt.util.spawn({
cmd: 'node-inspector',
args: ['&'],
opts: {
//cwd: current workin directory
}
},
function (error, result, code) {
if (error) {
grunt.log.write (result);
grunt.fail.fatal(error);
}
done();
});
grunt.log.writeln ('inspector started');
});
这里有很好的答案。2017年,现在你可以做到
node --inspect --debug-brk $(which grunt) taskName
打印类似的东西。
To start debugging, open the following URL in Chrome:
chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:9229/232652c3-f63c-4b00-8de9-17dfad5db471
在 chrome 中打开那个 URL,你就可以开始了!
我正在使用 Node 7.3.0,我在 Mac 上。您可能必须遵循其他帖子中的一些建议才能使其在 Windows 上运行。
2019 年更新
如果您想在调试模式下启动 grunt 任务并在第一行中断:
node --inspect-brk $(which grunt) taskName
如果要在特定端口以调试模式启动 grunt 任务:
node --inspect-brk=8080 $(which grunt) taskName
如果要将 VSCODE 附加到运行 grunt 调试会话的节点进程,请在 vscode 中使用以下配置:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "attach",
"name": "Attach by port IP 5656",
"port": 8080
}
]
}