debug 函数的一些常见用法
在开发过程中我们常常需要调试输出一些内容,以往为了省事你可能会使用 console.log
来输出信息,但是我们不推荐你这么做,原因如下:
- 输出比较单一没有统一的命名前缀,需要你每次都添加一些字符串来标示
- 添加了还得再删除或注释掉(大多数情况下你会忘记处理)
- 你没办法控制哪些需要输出哪些无需输出
- 如果想知道一个逻辑的过程耗时你也需要自己记录并计算
我们应该使用 debug 工具来解决这个问题。
在项目中使用 debug
在你的代码中引入这个对象
src/test.ts
import { $debug } from 'zenweb';
// 打印信息
$debug('debug test');
// 创建命名空间
const serviceDebug = $debug.extend('service');
// 打印信息
serviceDebug('ns1 test');
// 创建命名空间
const chatDebug = $debug.extend('chat');
// 打印信息
chatDebug('ns2 test');
执行命令测试是否工作
DEBUG=* npx ts-node src/test.ts
输出内容:
app debug test +0ms
app:service ns1 test +0ms
app:chat ns2 test +0ms
控制输出
只想看到的
例如我们只想看到 app:chat 的信息而不想看到别的
DEBUG=app:chat npx ts-node src/test.ts
你可能已经注意到 DEBUG
环境变量的不同了
不想看到的
再比如我们不想看到 app:chat 的信息,其他的都可以
DEBUG=*,-app:chat npx ts-node src/test.ts
提示
注意到多了个 -
号吗? 并且控制规则支持通配符,例如:app:*
在 zenweb 项目中我们只需要修改 .env
文件中 DEBUG
环境变量即可
与业务代码的配合
debug 工具不仅能输出信息,还能做到条件判断,例如我们有一个 debug 信息输出需要用到其他函数的调用,而不需要输出的时候又完全用不到,该怎么办呢?
// 可以使用条件判断
if (chatDebug.enabled) {
chatDebug('current user: %o', getCurrentUser());
}