Sentry JavaScript SDKs:核心模块、平台适配与开发调试实践
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 的安装后,进入项目根目录,执行以下命令初始化工作区:
- 安装所有项目依赖:
yarn - 使用 Lerna 引导(
bootstrap)项目,链接各包的依赖关系:yarn lerna bootstrap - 执行首次构建,确保 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包本身,还会构建其所有直接和间接依赖项(如utils、core、browser等),以及依赖@sentry/react的其他包(例如gatsby和nextjs)。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 调试测试的步骤:
- 在测试文件或被测试的底层代码中,设置你希望 Jest 暂停执行的断点 (
breakpoint),或者直接插入debugger;语句。 - 打开包含待调试测试的文件,确保该文件在编辑器中处于激活状态。
- 切换到 VSCode 侧边栏的"运行和调试"视图(通常是一个虫子图标),然后从顶部的下拉菜单中选择
Debug unit tests - just open file配置。 - 点击绿色的"启动调试"按钮(形似播放键),VSCode 将在监听模式下运行当前打开文件中的测试,并在你设置的断点处暂停。
实用技巧:
如果你的断点位于多个测试用例共享的代码段中,并且你选择运行整个测试文件,调试器可能会在许多你当前不关心的测试中反复暂停。为避免此情况,你可以将目标测试的 it 或 test 函数替换为 it.only 或 test.only。这样,当调试器命中断点时,你就能确定当前正处于你关注的特定测试流程中。
使用 VSCode 调试 Sentry JavaScript SDK 测试
代码规范检查 (Linting)
与构建和测试类似,代码规范检查可以通过 yarn lint 命令在项目根目录或特定软件包目录中执行。
注意: 在运行 yarn lint 之前,请务必先运行 yarn build 命令。
yarn lint