nodejs安装_nodejs调试全局安装的cli脚本
最近在阅读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.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/guides/debugging-getting-started/
请注意,此乃 Shadow如寒灬原创文章、转载请附上此链接https://www.wanyan.site/
nodejs安装_nodejs调试全局安装的cli脚本相关推荐
- nodejs安装后更改全局安装路径
本文为了学习纪录方便我以后忘记从新回来查看 安装好nodejs我们想修改全局安装的路径放到d盘比较好 在安装目录下(D:\Program Files\nodejs)新建node_global与node ...
- node mysql安装目录_nodejs 指定全局安装路径和缓存路径
1.前提:已安装 nodejs(nodejs官网 https://nodejs.org), 并且已将其添加到了环境变量 path 中: 2.进入cmd命令行,然后输入 node -v ,测试是否安装成 ...
- nodejs npm install -g 全局安装和非全局安装的区别
1. npm install xxx -g 时, 模块将被下载安装到[全局目录]中. [全局目录]通过 npm config set prefix "目录路径" 来设置. 比如说, ...
- Mac 下安装composer 及全局安装
Composer 是 PHP 的一个依赖管理工具.它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们. 系统要求 运行 Composer 需要 PHP 5.3.2+ 以上版本.一些敏感的 P ...
- npm包全局安装和局部安装,执行包命令有什么不同?
之前开发了一个npm的包.在实际应用中发现了一个问题.如果你想要直接执行这个包的命令,那么你就需要全局安装这个包.如果你只是局部安装,且没有在package.json文件中配置的话,就会提示该命令无法 ...
- npm全局安装_安装webpack
安装Webpack前的准备工作: 1. 由于 webpack 执行打包压缩时依赖 nodeJS,先确保你的系统安装了nodeJS 5.0.0 及以上的版本. 2. 因为 npm 是 nodeJS 平台 ...
- Redis安装与调试
Redis安装与调试 Redis安装与调试linux版本:64位CentOS 6.5 Redis版本:2.8.17 (更新到2014年10月31日) Redis官网:http://redis. ...
- 安装软件,python安装,node.js安装,pycharm安装,vscode安装,PR, PS, LR.AE Windows开关机等,雪崩的时候没有一片雪花儿是无辜的
安装 (汉语词语) 安装,汉语词汇,就是按照一定的程序.规格把机械或器材固定在一定的位置上,也指按照一定的方法.规格把机械或器材等固定在一定的地方. 出处 徐迟 <石油头>:"就 ...
- 第95篇 ES之安装Elastica及总结安装Elastica
关键词:安装Elastica,总结安装Elastica 一.安装Elastica 1.1 在备用服务器上安装 https://www.elastic.co/guide/en/elasticsearch ...
最新文章
- RHEL6入门系列之十三,阶段练习1
- 在西瓜数据集上训练_训练时间和参数量百倍降低,直接使用标签进行预测,性能竟超GNN...
- php socket非阻塞,php stream_set_blocking设置非阻塞模式,php stream_set_blocking影响函数fgets()和fread()...
- 量子计算机人的大脑,人类的大脑是量子计算机吗?科学家正在进行测试!
- 面试官让我讲下线程的WAITING状态,我笑了
- c++ 舞伴配对问题_挑战新物体描述问题,视觉词表解决方案超越人类表现
- linux下unix timestamp 与 可视化时间/常规时间进行转换
- [转]【Linux】一幅图秒懂LoadAverage(负载)
- Servlet的单例模式
- HDMI热插拔检测原理
- 集成学习之Adaboost算法
- Android Studio - 安装插件GsonFormat
- Anaconda出现Navigator Error的解决办法
- iOS客户端如何测试推送
- 五子棋(人机)-粗暴版AI
- Chrome实现独立代理
- tomcat服务莫名其妙停止
- pytest入门_测试用例分类_@pytest.mark.smoke
- 深入理解递归:美丽的科赫雪花
- confluence草稿机制原理
热门文章
- mysql cmd 删除表_MySQL查看表和清空表的常用命令总结
- 《趣学算法 [陈小玉]》学习笔记01
- 数量词a lot of、much、many、a little、a few_29
- 英语中正式和休闲的打招呼_6
- 计算机应用从组织内部,全国2014年10月自考管理系统中计算机应用试题和答案
- bzoj2425 [HAOI2010]计数 组合数
- php滚动图代码,JS上下、左右滚动代码(支持图片滚动)
- Intel Core Enhanced Core架构/微架构/流水线 (6) - 指令预译码/指令队列/指令译码
- 其他电子计算机配套产品及耗,F-商品和服务税收分类编码-.xls
- 日期格式无法识别_Excel – 将各种伪日期批量转化为真日期