在编写 JavaScript 代码时,很容易遇到错误,这些错误经常是由于异步代码中的回调触发的。在这种情况下,调试变得非常困难,因为在错误日志中只会显示回调链的最后一项,而不是完整的回调栈。使用 Node.js 自带的 Error.captureStackTrace() 方法可以解决这个问题,但它不利于跨项目或者跨机器进行调试。这就是我们需要 Long-stack-traces 这个 npm 包的原因。
Long-stack-traces 介绍
Long-stack-traces 是一个 npm 包,它可以通过捕捉异常并将回溯保存在一个全局上下文中,以方便将来的调试。它为 Node.js 和浏览器提供了跨平台的通用 API,可以让我们在异步调用栈中轻松地追踪和诊断错误。
安装 Long-stack-traces
安装 long-stack-traces 包非常简单。可以使用 npm 进行全局安装,也可以将其作为项目的依赖项进行安装。
npm install long-stack-traces --save-dev
在 Node.js 中使用 Long-stack-traces
要在 Node.js 中使用 Long-stack-traces,只需将其作为项目的依赖项之一,并确保在应用程序开始运行之前已调用 Long-stack-traces。
const LongStackTraces = require('long-stack-traces'); // 将 long-stack-traces 作为全局异常处理器 LongStackTraces.register();
现在,在未处理的全局异常时,Long-stack-traces 将收集回调栈,并将其添加到异常对象中的 .stack 属性中。这比 Node.js 内置的 Error.captureStackTrace 更加强大,并且使跨项目和跨机器之间的调试变得更加容易。
在浏览器中使用 Long-stack-traces
Long-stack-traces 在浏览器中的使用也非常简单。只需要将其作为 JavaScript 文件引入到 HTML 页面,然后就可以使用。
<script src="path/to/long-stack-traces.js"></script> <script> // 启用 long-stack-traces LongStackTraces.register(); </script>
就像在 Node.js 中一样,Long-stack-traces 会将回溯信息附加到异常对象中的 .stack 属性中,以便更轻松地进行调试和故障排除。
Long-stack-traces 示例
让我们来看一个简单的实例来说明 Long-stack-traces 的使用。
-- -------------------- ---- ------- ----- --------------- - ----------------------------- --------------------------- -------- ---------- - ------------- -- - ----- -- ----- - -------- ---------- - ------------- -- - ----------- -- ----- - -------- ---------- - ------------- -- - ----------- -- ----- - -------- ------ - --------- -- - ----- --- -------- -- -- --------- --- - -------
上面的代码将抛出一个错误。在未启用 Long-stack-traces 时,错误栈中仅包含错误本身:
-- -------------------- ---- ------- ------ - -- -- ------ -- ---- ------------------------- -- ------------------ ------------------------ -- --------------- ------------------------------------------ -- ----------------------------- ------------------------------------------ -- ----------- ----------------------------------------- -- --------------------- ----------------------------------------- -- ------------------------------ --- -------- -------------------------------------- -- ----------------------------------------
启用 Long-stack-traces 后,错误堆栈会包含回调链中的所有位置:
-- -------------------- ---- ------- ------ - -- -- ------ -- ------ ----------------------- -- ------------------ ------------------------ -- ------------- ----------------------------- -- ------------- ---------------------------- -------------------- -- ------ ------------------------ -- ------------------ ------------------------ -- ------------- ----------------------------- -- ------------- ---------------------------- -------------------- -- ------ ------------------------ -- ---- ------------------------ -- ------------------ ------------------------ -- --------------- ------------------------------------------ -- ----------------------------- ------------------------------------------ -- ----------- ----------------------------------------- -- --------------------- -----------------------------------------
通过 Long-stack-traces,我们可以很容易地看出错误来自异步回调链,而不仅仅是错误的起始位置。
结论
使用 Long-stack-traces,我们可以轻松地排查异步回调链中的错误,同时保留所有相关回溯信息。这对于跨项目、跨机器的调试非常有用。如果你在编写 Node.js 或浏览器中的异步代码并且需要进行调试,请尝试 Long-stack-traces,相信它会带给你很多帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5eedaed5b5cbfe1ea0610eec