当前位置:首页 > 技术 > 正文内容

Sentry JavaScript SDKs:核心模块、平台适配与开发调试实践

访客 技术 2026年6月22日 3

Sentry JavaScript SDKs Overview

Sentry JavaScript SDK 生态概览

Sentry 为 JavaScript 生态系统提供了全面的错误和性能监控解决方案。其 JavaScript SDK 家族采用模块化设计,以满足不同运行环境和框架的需求。

核心平台 SDKs

这些 SDK 针对特定的 JavaScript 运行环境进行了优化,提供基础的错误捕获、性能追踪和上下文信息收集功能。

  • @sentry/browser: 专为现代浏览器环境设计,涵盖了 `GlobalHandlers`、`TryCatch`、`Breadcrumbs` 等核心功能。
  • @sentry/node: 面向 Node.js 应用,内置了对 `Express`、`Koa` 等流行后端框架的集成支持。
  • @sentry/electron: 针对 Electron 桌面应用,支持原生层面的崩溃报告。
  • @sentry/react-native: 适用于 React Native 移动应用,同样支持原生崩溃捕获。
  • @sentry/capacitor: 为 Capacitor 应用和 Ionic 框架提供原生崩溃支持。
  • sentry-cordova: 面向 Cordova 混合应用,支持原生崩溃报告。

框架集成 SDKs

为了与主流前端框架无缝集成,Sentry 提供了开箱即用的特定框架 SDK,它们通常基于 @sentry/browser 并添加了框架特定的集成逻辑。

  • @sentry/angular: 为 Angular 应用提供深度集成。
  • @sentry/react: 增强 React 应用的监控能力。
  • @sentry/ember: 针对 Ember 框架。
  • @sentry/vue: 为 Vue.js 应用提供支持。
  • @sentry/gatsby: 适用于 Gatsby 静态网站生成器。
  • @sentry/nextjs: 为 Next.js 应用优化。

基础与共享模块

为了保持 SDK 的可维护性和扩展性,Sentry JavaScript SDK 采用了 monorepo 结构,并包含了多个共享的底层模块。

  • @sentry/core: 提供了所有 JavaScript SDK 的基础接口、类型定义和核心抽象类。
  • @sentry/hub: 负责 SDK 的全局状态管理机制。
  • @sentry/minimal: Sentry 提供的最轻量级 SDK 实现。
  • @sentry/tracing: 专门用于性能监控和分布式追踪的集成与扩展。
  • @sentry/utils: 包含了一系列在不同 SDK 中复用的辅助函数和工具。
  • @sentry/types: 定义了整个 Sentry JavaScript 生态系统中共用的类型。
  • @sentry/integrations: 一个可插拔的集成模块集合,用于扩展 JS SDK 的功能。

历史版本说明

  • raven-js: 曾是稳定的浏览器端 JavaScript SDK,目前仍接受错误修复,但所有新功能已全部迁移至 @sentry/browser
  • raven: 曾是 Node.js 端的稳定 SDK,与 raven-js 类似,新功能开发已转向 @sentry/node

Sentry JavaScript SDK 开发调试指南

要参与 Sentry JavaScript SDK 的开发或进行调试,你需要配置一个合适的本地环境。Sentry JavaScript SDK 项目采用 Monorepo 架构,并由 Lerna 进行包管理。

环境准备

确保你的系统已安装 Node.js 和 Yarn。

完成 Node.js 和 Yarn 的安装后,进入项目根目录,执行以下命令初始化工作区:

  1. 安装所有项目依赖:
    yarn
    
  2. 使用 Lerna 引导(bootstrap)项目,链接各包的依赖关系:
    yarn lerna bootstrap
    
  3. 执行首次构建,确保 TypeScript 能够正确识别所有模块的类型定义:
    yarn build
    

完成这些步骤后,开发环境就已准备就绪。

构建软件包

由于项目使用 TypeScript 编写,代码在运行前需要编译成 JavaScript。项目根目录提供了多种构建命令:

  • 全量一次性构建 (yarn build:dev):

    该命令会为所有软件包执行一次性构建,同时生成 ES5 和 ES6 版本的代码。

    yarn build:dev
    
  • 按需筛选构建 (yarn build:dev:filter <package-name>):

    如果你只需要构建与特定 NPM 包相关的项目,可以使用此命令。例如,执行 yarn build:dev:filter @sentry/react 将不仅构建 @sentry/react 包本身,还会构建其所有直接和间接依赖项(如 utilscorebrowser 等),以及依赖 @sentry/react 的其他包(例如 gatsbynextjs)。

    yarn build:dev:filter @sentry/react
    
  • 监听模式构建 (yarn build:dev:watch):

    推荐在开发过程中使用此命令。它会以监听模式运行 yarn build:dev,在文件发生更改时自动重新编译,极大提升开发效率。

    yarn build:dev:watch
    

编写与执行测试

编写测试

任何重要的功能新增或错误修复都应伴随相应的测试用例。每个软件包的根目录都包含一个 test 文件夹,用于存放其测试文件。

需要注意的是,对于 @sentry/browser 包,若新增集成测试文件,需将其路径手动添加到 shell.js 文件中。对于其他软件包,直接在现有文件中添加测试即可。

执行测试

测试的执行方式与构建类似:

  • 在项目根目录运行 yarn test 会对所有软件包执行测试。
  • 在特定软件包的目录中运行 yarn test 则仅对该软件包执行测试。

此外,各 package.json 文件中的 scripts 部分还定义了运行测试子集的命令。

重要提示: 在运行 yarn test 之前,请务必先执行 yarn build 命令以确保代码已编译。

yarn test

测试调试

在编写或修复测试时,有时需要借助调试器来深入分析代码行为。Visual Studio Code (VSCode) 提供了强大的调试功能,可以用于调试 Sentry JavaScript SDK 的测试。

首先,请确认你已安装 Tasks Shell Input 扩展(通常在 VSCode 侧边栏的"扩展"视图中作为工作区推荐扩展)。

以下是使用 VSCode 调试测试的步骤:

  1. 在测试文件或被测试的底层代码中,设置你希望 Jest 暂停执行的断点 (breakpoint),或者直接插入 debugger; 语句。
  2. 打开包含待调试测试的文件,确保该文件在编辑器中处于激活状态。
  3. 切换到 VSCode 侧边栏的"运行和调试"视图(通常是一个虫子图标),然后从顶部的下拉菜单中选择 Debug unit tests - just open file 配置。
  4. 点击绿色的"启动调试"按钮(形似播放键),VSCode 将在监听模式下运行当前打开文件中的测试,并在你设置的断点处暂停。

实用技巧:

如果你的断点位于多个测试用例共享的代码段中,并且你选择运行整个测试文件,调试器可能会在许多你当前不关心的测试中反复暂停。为避免此情况,你可以将目标测试的 ittest 函数替换为 it.onlytest.only。这样,当调试器命中断点时,你就能确定当前正处于你关注的特定测试流程中。

Sentry JavaScript SDK VSCode Debugging Screenshot

使用 VSCode 调试 Sentry JavaScript SDK 测试

代码规范检查 (Linting)

与构建和测试类似,代码规范检查可以通过 yarn lint 命令在项目根目录或特定软件包目录中执行。

注意: 在运行 yarn lint 之前,请务必先运行 yarn build 命令。

yarn lint

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。