我该如何debugging一个通过命令行(cli)启动的节点应用程序,比如永远或是主pipe?

我熟悉debugging我自己的节点应用程序(通常使用节点检查器)。 今天我想debugging别人的程序。 我试图跟supervisor追查一个问题。 所以自然我只是添加一个--debug (或debug-brk )的命令调用,但它传递给它正在监督的代码。

我已经尝试添加到主pipejs文件的debugger行,但没有奏效(可能是因为当时没有debugging器)。 这里有一些竞争 – 我需要启动debugging器,并在启动之后,但在它从命令行处理其参数之前,将其附加到监控程序进程。

我真正想在这里做的是停止supervisor ,并在处理其命令行参数之前进行debugging。 我怎样才能做到这一点?

在开发我的hexo博客时,我遇到了同样的问题。 文档还不完整,所以我发现自己有时需要进行反向工程。

基本的想法是,在Node.js中,即使你的cli应用程序只是正在暴露给OS命令行界面的普通节点应用程序。 在Unix系统上,你正在使用这一行:

 #!/usr/bin/env node 

允许环境执行脚本。

许多基于cli的节点应用程序试图坚持用-g选项全局安装它们。

 npm install -g node-inspector 

我个人更喜欢对我的开发环境尽可能多的控制,所以我更喜欢打破一些约定,检查我的node_modules到源代码控制,同时通过删除-g来安装我可以在本地安装的所有东西。

 npm install node-inspector 

现在你不必为了完成这个工作而这样做,我只是描述这个设置,因为它涉及到你的问题。 当我运行节点检查器时,我不能简单地使用:

 node-inspector 

相反,我必须明确地从我的项目中调用它。 我通过在我的node_modules / .bin文件夹中执行符号链接来做到这一点:

 node_modules/.bin/node-inspector 

现在我正在像你一样运行节点检查器。

接下来,我需要做的是在debugging中启动cli进程,并可以select传递params参数:

 node --debug-brk node_modules/.bin/hexo generate 

注意我在这里显式调用符号链接,而不是简单地:

 node --debug-brk hexo generate 

如果我尝试上面的行,我会得到一个错误:“错误:找不到模块”。

我希望这有帮助。