![3615cffc98917520abf3c2e3835a8724.png](https://i-blog.csdnimg.cn/blog_migrate/47bc0a5dfc8d49ac2ee9d0bc34394b81.jpeg)
最近在阅读cordova-cli
的源码,想着要是能直接在vscode中打开调试,一步步地查看cordova命令的执行过程,那么将会大大的方便我对其源码的阅读。然而网上找了很多教程,大多都是直接调试本地脚本或者node_module/.bin
中的命令脚本的方法,很少有调试全局的命令脚本的方法,因此在自己试了多次之后有了这篇文章,能够调试全局的命令脚本,在文章结尾部分也有介绍如何调试node_module/.bin
中的脚本的方式,大同小异
方式一:通过npm run <script-name>
的方式进行断点调试
此方式首先需要将需要进行调试的全局cli命令在package.json中配置好,例如本例中调试的是cordova的全局命令可以按照以下的方式设置: package.json
{
...
"scripts": {
"gloal-debug": "node --inspect-brk=5858 /usr/local/bin/cordova platform add android"
},
...
}
因为我们已经指定了--inspect-brk=5858
,所以在terminal中执行npm run gloal-debug
并不会直接运行并结束脚本,而是有类似提示,并且命令脚本暂时暂停执行:
Debugger listening on ws://127.0.0.1:5858/38668db9-48e4-49c8-9c07-a91c64ba156b
注意到 ws://127.0.0.1:5858 中的端口号即我们script中的配置的端口号
这代表我们执行的命令脚本已经进入到了调试模式了,此时我们可以通过设置vscode来连接到该命令脚本对应的nodejs实例了。
- 首先添加一个类型为
Node.js:Attach
的调试
![c24603a248dc4db6efea1b408e2a581a.png](https://i-blog.csdnimg.cn/blog_migrate/04f82cec0085458c66758990a4f921f3.jpeg)
![dff20572bac797dd2ddb939fe0650a50.png](https://i-blog.csdnimg.cn/blog_migrate/3fd5a182efde1ef61b8ba82d1a663195.png)
- 然后在打开的lauch.json文件中修改其中的配置项目,最重要的是将port改为
scripts
中配置的5858
{
"type": "node",
"request": "attach",
"name": "连接cordova的调试",
"port": 5858
}
- 最后在vscode启动对应的配置
![45ce37a393a76982a5488d20c6758ab9.png](https://i-blog.csdnimg.cn/blog_migrate/34dcb7c6303364a5b020ad5c7d635f52.jpeg)
若能看到3即代表我们已经成功连接到了cordova命令的nodejs实例的调试,到此为止我们可以愉快的开始我们的调试模式下源码阅读之旅了
方式二:request类型为lauch的方式
若是我们不想先去命令行工具中执行npm run gloal-debug
然后再连接到对应的命令脚本的nodejs实例,我们可以直接这样配置lauch.json
文件
launch.json
{
"version": "0.2.0",
"configurations": [
{
"type": "node", //nodejs的调试类型固定为node,<必填>
"request": "launch", //固定为launch,<必填>——launch|attach二选一
"name": "调试cordova-create", //将会显示到vscode的debug栏的下拉菜单的名称,<必填>
"cwd": "${workspaceFolder}", //命令的工作目录,[可选]
"runtimeExecutable": "npm", //将要执行的命令
"runtimeArgs": [ //命令参数列表
"run",
"gloal-debug"
],
"stopOnEntry": true, //在程序文件的入口处断点,[可选]——建议指定为true,免去了先找到对应文件再打开的苦恼
"port": 5858 //监听的调试端口号,与`script`中的设置保持一致
}
]
}
此设置在调试启动时将会执行 npm run gloal-debug
,即执行package.josn
中scripts
中的名称为gloal-debug
的命令,配置port
为5858
,因此在执行时将会自动连接到nodejs实例的5858
端口上了,此方式比上一个方案的优点在于启动并且直接连接到了对应调试
方式三:直接对全局的依赖对应的脚本进行断点
有了launch.json文件,我们可以直接编辑此文件来更好的配置我们的调试
launch.json
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "cordova lauch",
"program": "/usr/local/bin/cordova",
"args": [
"platform",
"add",
"ios"
],
"stopOnEntry": true,
}
}
如何调试node_module/.bin
中的脚本
launch.json
文件中对应的program直接改为${workspaceFolder}/node_module/.bin/<待调试的脚本的名称>
即可:
launch.json
{
"type": "node",
"request": "launch",
"name": "node_module-cordova",
"program": "${workspaceFolder}/node_modules/.bin/cordova",
"args": [
"--help"
],
"stopOnEntry": true
}
如何找到全局安装的nodejs的命令的位置
// 直接输出nodejs全局依赖的路径
npm ls -g --depth 0 | grep -E ^/
// 或者
// 查看nodejs全局安装的所有依赖
npm ls -g --depth 0
参考资料:
https:// nodejs.org/docs/latest- v10.x/api/cli.html#cli_inspect_brk_host_port
更多的nodejs调试相关可以参阅如下网址
https:// nodejs.org/en/docs/guid es/debugging-getting-started/
请注意,此乃 Shadow如寒灬原创文章、转载请附上此链接https://www.wanyan.site/