最近在用vscode 1.23版本的时候发现outDir
不可使用了,建议这么改吧,直接program
采用编译后的文件,而后打开sourceMaps
,同时在babel
编译的时候本身搞--watch
及时生成.map
文件便于vscode
索引;若是你要编译其余语言,其实能够在package.json
当中添加scripts
,经过tasks.json
来在debug以前进行编译,下面展现出.vscode
下的两个文件,此为babel
方法,其余相似node
.launch.jsongit
"configurations": [ { "type": "node", "request": "launch", "name": "启动程序", "program": "${workspaceFolder}/lib/login.js", "sourceMaps": true, "preLaunchTask": "build" // 等于下面`label`值 } ]
tasks.jsones6
{ "version": "2.0.0", "command": "npm", "tasks": [ { "label": "build", // 合起来就是`npm run build` "type": "npm", "script": "build" } ] }
package.jsongithub
"scripts": { "build": "babel src --out-dir lib --source-maps" },
实际上这样较慢,建议单独在build加watch,而后直接不用preLaunchTask
web
以前一直习惯了用浏览器来调试代码,偶尔想调试一下node包中的代码,或者本身想写一个小的node插件无从下手,不知道该怎么调试,通过查找资料和向导师请教实践了一下这个过程chrome
Visual Studio Code(如下简称vscode)是一个很强大的编辑器,相对而言比较轻量,由于我一般喜欢webstorm,webstorm自动保存和错误提示的特性深受我喜好,可是对于调试nodejs来讲,vscode则更具备它的优点所在。vscode支持windows,OS X和Linux三种环境,而且能够安装扩展插件,于是能够知足绝大多数人的要求,安装配置非本文所要讲述的内容,请自行查找,本文着重讨论如何用vscode更好的调试node代码,但愿能对你们有所帮助。npm
左上角依次是项目目录,搜索,版本管理git相关(左下角为当前分支),调试,其余扩展插件 ,其余的均为中文标注,不解释,都是我们必要的,这几个若是没有的建议调出来这都是调试很必要的几个东西,能够去到菜单栏的查看中逐一调出json
点击图中左数第四个按钮,也就是调试,而后点击图中红框便可打开launch.jsonsegmentfault
"configurations": [ { "type": "node", "request": "launch", "name": "Launch Program", "program": "${workspaceFolder}/src/extract-cli.js", "args": ["--output", "output.pot", "${workspaceFolder}/test/product_group.vm"], "outDir": "${workspaceFolder}/dist", "sourceMaps": true } ]
type
和request
不用改,默认就能够,request
为launch
时用F5
直接能够启动调试,request
为attach按照官网解释是关联到已经运行的一个程序,可是此处能够无论,咱们就用vscode自带的调试器进行调试就好。windows
program
这个参数是指定要运行的js入口文件,其中${workspaceFolder}
为当前打开的项目目录,.vscode
目录会自动生成在此目录下,launch.json
也在此目录下
args
也是个比较重要的,好比该例,我执行命令gettext-extract --output output.pot input.vm
那么args的做用其实就是传入命令后面的参数,每一个空格之间要分开,写成args
的某个子元素
sourceMaps
对于编写es5代码来讲这个参数没有什么卵用,可是对于写es6
,TypeScript
等就十分有必要了,这个参数的值为true
时会利用编译过程生成的map来进行源码和编译后的代码进行对应,这样在源码打断点,就能够愉快的进行咱们的调试了
outDir
是用来标注编译后代码的生成目录的,帮助vscode进行查找
下面讨论下关于编译先后的对应关系这件事
program
参数若是直接指向编译后的文件,vscode
奇迹般的能够本身去寻找到源码文件,这对于咱们的调试是最简单的方式了 program
指向你编写的文件,那么须要提供一个outDir
参数,只要配置到编译生成目录就行了。sourceMaps
还有编译成成.js.map
若是你调试遇到了问题请尝试将sourceMaps
设置为true
并让编译工具生成map
文件只要在你调试的代码左边点击一下,只要是红色的,说明此处断点可行,如图所示
直接按F5
便可开始调试,会在界面上出现相似于chrome的那几个单步跳过,单步调试等等,使用方法相似chrome
,只是快捷键稍有不一样
而后点击左侧上面介绍的调试按钮,会看到运行到某一步的变量,还有调用堆栈状况,如图所示
捎带介绍一下本文使用的babel
和命令行入口相关的知识
package.json
,会发现有一个bin
的配置,这么配置再npm install
的时候就会将这两个命令加入到node_modules/.bin
当中,而后就能够用作命令行了"bin": { "gettext-compile": "./dist/compile-cli.js", "gettext-extract": "./dist/extract-cli.js" }
babel
执行命令时能够加--source-maps true
来生成map文件,若是遇到我上面说到问题的才会用到这个,估计其余的编译工具也会有;另外,咱们修改源文件以后,想当即重启调试来进行验证,每次都本身执行命令很麻烦,那么babel
自身支持--watch
参数,能够监控文件变化,这样咱们就能够实现简单的自动化babel
或者其余的命令行命令写的很长,不容易记住,那么咱们就能够将其写在package.json
当中,以下就是讲babel
编译写在其中,能够执行npm run prepublish
便可"scripts": { "prepublish": "babel --watch --presets es2015 --plugins transform-object-assign --source-maps true src --out-dir dist/" }
参考资料:
babel --help
的帮助