最近在阅读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的调试
  • 然后在打开的lauch.json文件中修改其中的配置项目,最重要的是将port改为scripts中配置的5858
{"type": "node","request": "attach","name": "连接cordova的调试","port": 5858
}

  • 最后在vscode启动对应的配置

若能看到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.josnscripts中的名称为gloal-debug的命令,配置port5858,因此在执行时将会自动连接到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/guides/debugging-getting-started/

请注意,此乃 Shadow如寒灬原创文章、转载请附上此链接https://www.wanyan.site/

nodejs安装_nodejs调试全局安装的cli脚本相关推荐

  1. nodejs安装后更改全局安装路径

    本文为了学习纪录方便我以后忘记从新回来查看 安装好nodejs我们想修改全局安装的路径放到d盘比较好 在安装目录下(D:\Program Files\nodejs)新建node_global与node ...

  2. node mysql安装目录_nodejs 指定全局安装路径和缓存路径

    1.前提:已安装 nodejs(nodejs官网 https://nodejs.org), 并且已将其添加到了环境变量 path 中: 2.进入cmd命令行,然后输入 node -v ,测试是否安装成 ...

  3. nodejs npm install -g 全局安装和非全局安装的区别

    1. npm install xxx -g 时, 模块将被下载安装到[全局目录]中. [全局目录]通过 npm config set prefix "目录路径" 来设置. 比如说, ...

  4. Mac 下安装composer 及全局安装

    Composer 是 PHP 的一个依赖管理工具.它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们. 系统要求 运行 Composer 需要 PHP 5.3.2+ 以上版本.一些敏感的 P ...

  5. npm包全局安装和局部安装,执行包命令有什么不同?

    之前开发了一个npm的包.在实际应用中发现了一个问题.如果你想要直接执行这个包的命令,那么你就需要全局安装这个包.如果你只是局部安装,且没有在package.json文件中配置的话,就会提示该命令无法 ...

  6. npm全局安装_安装webpack

    安装Webpack前的准备工作: 1. 由于 webpack 执行打包压缩时依赖 nodeJS,先确保你的系统安装了nodeJS 5.0.0 及以上的版本. 2. 因为 npm 是 nodeJS 平台 ...

  7. Redis安装与调试

     Redis安装与调试 Redis安装与调试linux版本:64位CentOS 6.5 Redis版本:2.8.17  (更新到2014年10月31日) Redis官网:http://redis. ...

  8. 安装软件,python安装,node.js安装,pycharm安装,vscode安装,PR, PS, LR.AE Windows开关机等,雪崩的时候没有一片雪花儿是无辜的

    安装 (汉语词语) 安装,汉语词汇,就是按照一定的程序.规格把机械或器材固定在一定的位置上,也指按照一定的方法.规格把机械或器材等固定在一定的地方. 出处 徐迟 <石油头>:"就 ...

  9. 第95篇 ES之安装Elastica及总结安装Elastica

    关键词:安装Elastica,总结安装Elastica 一.安装Elastica 1.1 在备用服务器上安装 https://www.elastic.co/guide/en/elasticsearch ...

最新文章

  1. RHEL6入门系列之十三,阶段练习1
  2. 在西瓜数据集上训练_训练时间和参数量百倍降低,直接使用标签进行预测,性能竟超GNN...
  3. php socket非阻塞,php stream_set_blocking设置非阻塞模式,php stream_set_blocking影响函数fgets()和fread()...
  4. 量子计算机人的大脑,人类的大脑是量子计算机吗?科学家正在进行测试!
  5. 面试官让我讲下线程的WAITING状态,我笑了
  6. c++ 舞伴配对问题_挑战新物体描述问题,视觉词表解决方案超越人类表现
  7. linux下unix timestamp 与 可视化时间/常规时间进行转换
  8. [转]【Linux】一幅图秒懂LoadAverage(负载)
  9. Servlet的单例模式
  10. HDMI热插拔检测原理
  11. 集成学习之Adaboost算法
  12. Android Studio - 安装插件GsonFormat
  13. Anaconda出现Navigator Error的解决办法
  14. iOS客户端如何测试推送
  15. 五子棋(人机)-粗暴版AI
  16. Chrome实现独立代理
  17. tomcat服务莫名其妙停止
  18. pytest入门_测试用例分类_@pytest.mark.smoke
  19. 深入理解递归:美丽的科赫雪花
  20. confluence草稿机制原理

热门文章

  1. mysql cmd 删除表_MySQL查看表和清空表的常用命令总结
  2. 《趣学算法 [陈小玉]》学习笔记01
  3. 数量词a lot of、much、many、a little、a few_29
  4. 英语中正式和休闲的打招呼_6
  5. 计算机应用从组织内部,全国2014年10月自考管理系统中计算机应用试题和答案
  6. bzoj2425 [HAOI2010]计数 组合数
  7. php滚动图代码,JS上下、左右滚动代码(支持图片滚动)
  8. Intel Core Enhanced Core架构/微架构/流水线 (6) - 指令预译码/指令队列/指令译码
  9. 其他电子计算机配套产品及耗,F-商品和服务税收分类编码-.xls
  10. 日期格式无法识别_Excel – 将各种伪日期批量转化为真日期