在前端开发中,经常需要调试代码,查看某些变量或函数的值。npm 包 debugged 是一个帮助开发者在控制台输出调试信息的工具,功能强大,使用方便,本篇文章将详细介绍 debugged 的使用方法以及其中的一些深入内容。
debugged 的安装和使用
首先,我们需要在项目中安装 debugged 包。使用 npm 命令行工具,在项目根目录下运行如下命令即可:
npm install debugged --save-dev
安装完成后,我们就可以在代码中使用 debugged 了。首先,需要在代码中引入 debugged:
const debugged = require('debugged');
接下来,我们就可以根据需要使用 debugged 输出调试信息了。debugged 使用方法很简单,只需要在输出语句前加上调试信息的标识符即可。标识符可以是任意字符串,比如:
const debug = debugged('myapp');
然后,在需要输出调试信息的地方,我们就可以使用这个标识符:
debug('Hello world!');
这样,我们就可以在控制台中看到输出:
myapp Hello world!
添加调试信息级别
上面的例子中,我们只是简单地使用了 debugged 输出了一条信息,但是 debugged 还有许多强大的功能。其中一项是添加调试信息级别。我们可以根据需要设置不同的级别,只有在指定级别及以上的调试信息才会输出。这样,可以在不同情况下选择不同的级别,方便调试输出的控制。
以下是 debugged 所支持的级别:
error
:用于输出错误信息;warn
:用于输出警告信息;info
:用于输出一般的调试信息;verbose
:用于输出更详细的调试信息;debug
:用于输出调试信息;silly
:用于输出无关紧要的信息。
我们可以在引入 debugged 的时候传入一个环境变量 DEBUG
,来设置要输出的调试信息级别:
const debugged = require('debugged'); const debug = debugged('myapp'); // 设置要输出的调试信息级别为 info 及以上 process.env.DEBUG = 'myapp:info'; debug('Hello world!');
在控制台中只会输出 info
或者更高级别的信息。
如果要设置多个环境变量,则可以使用竖线分隔符:
process.env.DEBUG = 'myapp:info|another:verbose';
这样就同时设置了 myapp
和 another
两个模块的调试信息级别。
命名空间与通配符
debugged 还支持命名空间和通配符的使用。这对于处理复杂的应用程序非常有用。我们可以为不同的模块设置不同的命名空间,来方便地控制它们的输出。
首先,我们可以在引入 debugged 的时候使用命名空间:
const debugged = require('debugged'); const debug = debugged('myapp'); const another = debugged('myapp:another');
在输出的时候,也可以设置不同的命名空间:
debug('Hello world!'); // 输出:myapp Hello world! another('Hello world!'); // 输出:myapp:another Hello world!
如果需要使用通配符来控制多个命名空间的输出,也可以这样做:
process.env.DEBUG = 'myapp:*'; debug('Hello world!'); // 输出:myapp Hello world! another('Hello world!'); // 输出:无
这里使用了 *
通配符,即匹配以 myapp:
开头的所有命名空间。这样,在输出 myapp:another
命名空间时不会输出任何信息。
深入了解 debugged
debugged 的源码非常简单,我们可以从中学到 JavaScript 中一些高级的技术。
首先,debugged 的核心逻辑是一个函数,可以接受标识符作为参数并返回一个函数:
function debug(namespace) { const logger = console.log.bind(console); return function(...args) { logger.apply(null, [`[${namespace}]`, ...args]); }; }
这里使用了一个 JavaScript 中很重要的特性——闭包。返回的函数中可以访问它外部的变量,在这里就是传入的标识符 namespace
。
另外,debugged 还使用了模板字符串和 ES6 的展开运算符,可以方便地输出多个参数:
function (...args) { logger.apply(null, [`[${namespace}]`, ...args]); }
最后,debugged 还实现了一个过滤函数,可以根据设置的调试信息级别来判断是否输出信息:
function enabled(namespace) { const levels = (process.env.DEBUG || '').split('|'); return levels.some(level => { return new RegExp(`^${namespace.replace(/\*/g, '.*')}$`).test(level); }); }
其中用到了多个 JavaScript 高级特性:
split()
:将字符串按分隔符分割成数组;some()
:对数组中的每个元素执行给定的函数,如果有一个返回 true,则返回 true;- 正则表达式:用来判断字符串是否符合要求。
总结
通过本文的介绍,我们了解了 npm 包 debugged 的使用方法以及其高级特性。debugged 可以方便地输出调试信息,还支持设置调试信息级别、命名空间和通配符等高级特性,非常适合在复杂的应用程序中使用。同时,我们也可以从 debugged 的源码中学习到 JavaScript 中很多高级特性及实际应用方法,可以提高我们的编程水平。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60055e4581e8991b448dbb88