mcpField
S
sentry-tanstack-start-sdk

sentry-tanstack-start-sdk

github.com/getsentry开发2721.9k 次安装今天更新
代码仓库

关于 sentry-tanstack-start-sdk

用于在 TanStack Start React 项目中配置 Sentry 的技能,涵盖浏览器和服务器运行时。它会扫描项目文件并引导设置监控,包括追踪、会话回放、日志和用户反馈;该 SDK 当前标注为 alpha。

主要功能

  1. 01扫描 TanStack Start 项目文件
  2. 02指导浏览器与服务器端配置
  3. 03配置错误监控和追踪
  4. 04涵盖回放、日志与用户反馈
  5. 05提供验证和故障排查

适用场景

  1. 01为 TanStack Start 应用添加 Sentry
  2. 02监控浏览器和服务器错误
  3. 03为路由和请求添加追踪
  4. 04启用回放、日志或应用内反馈

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/getsentry/sentry-for-ai --skill sentry-tanstack-start-sdk

安装后在 Claude Code 中输入/sentry-tanstack-start-sdk确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
error-monitoring.md
logging.md
session-replay.md
tanstackstart-features.md
tracing.md
user-feedback.md

详细介绍

所有技能 > SDK 设置 > TanStack Start React SDK

Sentry TanStack Start React SDK

这款向导风格的工具会扫描你的 TanStack Start React 项目,并引导你完成浏览器和服务器运行时的 Sentry 设置。

适用场景

  • 用户要求“将 Sentry 添加到 TanStack Start”或“在 TanStack Start React 应用中设置 Sentry”
  • 用户想要安装或配置 @sentry/tanstackstart-react
  • 用户想要为 TanStack Start React 配置错误监控、追踪、会话回放、日志或用户反馈
  • 用户询问 sentryTanstackStart、wrapFetchWithSentry、instrument.server.mjs 或 TanStack Start 中间件插桩

**注意:**此 SDK 目前处于 alpha 阶段,文档注明其兼容 TanStack Start 1.0 RC。 实施前,请务必对照 docs.sentry.io/platforms/javascript/guides/tanstackstart-react/ 进行核实。


阶段 1:检测

在提出任何建议前,运行以下命令以了解项目:

# Detect TanStack Start / Router and existing Sentry
cat package.json | grep -E '"@tanstack/react-start"|"@tanstack/react-router"|"@sentry/tanstackstart-react"'

# Check if Sentry is already present
cat package.json | grep '"@sentry/'

# Detect key files used by the TanStack Start setup
ls src/router.tsx src/start.ts src/server.ts instrument.server.mjs vite.config.ts vite.config.js 2>/dev/null

# Check whether source map upload credentials are configured
cat .env .env.local .env.sentry-build-plugin 2>/dev/null | grep "SENTRY_AUTH_TOKEN"

# Detect deployment hints in scripts
cat package.json | grep -E '"dev"|"build"|"start"|NODE_OPTIONS|--import'

# Detect logging libraries
cat package.json | grep -E '"pino"|"winston"|"loglevel"'

# Detect companion backend directories
ls ../backend ../server ../api 2>/dev/null
cat ../go.mod ../requirements.txt ../Gemfile ../pom.xml 2>/dev/null | head -3

需要确定的事项:

问题影响
是否存在 @tanstack/react-start?确认此技能是正确的设置路径
是否已安装 @sentry/tanstackstart-react?跳过安装,直接进行功能调整
是否存在 src/router.tsx?决定客户端 Sentry.init 的位置
是否存在 src/start.ts?设置服务器端错误的全局中间件
是否存在 src/server.ts?决定服务器入口插桩的位置
是否存在 instrument.server.mjs?确定运行时启动插桩路径
是否存在 vite.config.ts?添加 sentryTanstackStart 插件和源映射
是否已配置 SENTRY_AUTH_TOKEN?确认是否已准备好上传源映射
是否找到了后端目录?触发阶段 4 的交叉链接建议

阶段 2:建议

根据发现的情况给出具体建议。不要提出开放式问题,应直接提供方案:

推荐(核心覆盖):

  • ✅ 错误监控 — 始终启用;捕获未处理的客户端和服务器错误
  • ✅ 追踪 — 对浏览器和服务器的请求及路由耗时进行追踪,价值很高
  • ✅ 会话回放 — 推荐用于面向用户的应用

可选(增强可观测性):

  • ⚡ 日志 — 需要结构化日志搜索以及日志与追踪关联时推荐启用
  • ⚡ 用户反馈 — 产品团队希望用户在应用内提交问题报告时推荐启用

建议逻辑:

功能推荐条件
错误监控始终启用 — 不可或缺的基线功能
追踪通常推荐用于 TanStack Start;路由和 fetch 插桩可立即带来价值
会话回放面向用户的应用、登录流程、结账流程,或难以复现的 UX 问题
日志已有日志策略、支持工作流,或需要关联追踪与日志
用户反馈团队希望直接收集用户报告,且无需用户离开应用

建议:“我推荐启用错误监控 + 追踪 + 会话回放。需要我也启用日志和用户反馈吗?”


阶段 3:引导设置

安装
npm install @sentry/tanstackstart-react --save
在 src/router.tsx 中配置客户端 Sentry

在路由器工厂内初始化 Sentry,并将其限制为仅在浏览器中运行:

import * as Sentry from "@sentry/tanstackstart-react";
import { createRouter } from "@tanstack/react-router";

export const getRouter = () => {
  const router = createRouter();

  if (!router.isServer) {
    Sentry.init({
      dsn: "___PUBLIC_DSN___",
      dataCollection: {
        // userInfo: false,
        // httpBodies: [],
      },

      integrations: [
        Sentry.tanstackRouterBrowserTracingIntegration(router),
        Sentry.replayIntegration(),
        Sentry.feedbackIntegration({
          colorScheme: "system",
        }),
      ],

      enableLogs: true,
      tracesSampleRate: 1.0,
      replaysSessionSampleRate: 0.1,
      replaysOnErrorSampleRate: 1.0,
    });
  }

  return router;
};
在 instrument.server.mjs 中配置服务器端 Sentry

在项目根目录创建 instrument.server.mjs:

import * as Sentry from "@sentry/tanstackstart-react";

Sentry.init({
  dsn: "___PUBLIC_DSN___",
  dataCollection: {
    // To disable sending user data and HTTP bodies, uncomment the lines below. For more info visit:
    // https://docs.sentry.io/platforms/javascript/guides/tanstackstart-react/configuration/options/#dataCollection
    // userInfo: false,
    // httpBodies: [],
  },
  enableLogs: true,
  tracesSampleRate: 1.0,
});
在 vite.config.ts 中配置 Vite 插件

sentryTanstackStart 应作为最后一个插件:

import { defineConfig } from "vite";
import { sentryTanstackStart } from "@sentry/tanstackstart-react/vite";
import { tanstackStart } from "@tanstack/react-start/plugin/vite";

export default defineConfig({
  plugins: [
    tanstackStart(),
    sentryTanstackStart({
      org: "___ORG_SLUG___",
      project: "___PROJECT_SLUG___",
      authToken: process.env.SENTRY_AUTH_TOKEN,
    }),
  ],
});

如果令牌存储在 .env 中,请先在 Vite 配置中使用 loadEnv 加载,再将其传递给插件。

在 src/server.ts 中插桩服务器入口点

使用 wrapFetchWithSentry 封装 fetch 处理程序:

import { wrapFetchWithSentry } from "@sentry/tanstackstart-react";
import handler, { createServerEntry } from "@tanstack/react-start/server-entry";

export default createServerEntry(
  wrapFetchWithSentry({
    fetch(request: Request) {
      return handler.fetch(request);
    },
  }),
);
在 src/start.ts 中添加全局服务器中间件

这些中间件会捕获服务器端请求和函数错误:

import {
  sentryGlobalFunctionMiddleware,
  sentryGlobalRequestMiddleware,
} from "@sentry/tanstackstart-react";
import { createStart } from "@tanstack/react-start";

export const startInstance = createStart(() => {
  return {
    requestMiddleware: [sentryGlobalRequestMiddleware],
    functionMiddleware: [sentryGlobalFunctionMiddleware],
  };
});

Sentry 中间件应位于每个数组的首位。

运行时启动模式

选择一种运行时方式:

运行时模式适用场景……备注
--import 标志你可以控制 Node 启动标志生产环境监控的首选方式
在 src/server.ts 中直接导入宿主环境限制启动标志(例如无服务器宿主)仅限于对原生 Node API 进行插桩

--import 示例:

{
  "scripts": {
    "dev": "NODE_OPTIONS='--import ./instrument.server.mjs' vite dev --port 3000",
    "build": "vite build && cp instrument.server.mjs .output/server",
    "start": "node --import ./.output/server/instrument.server.mjs .output/server/index.mjs"
  }
}

直接导入回退方案(位于 src/server.ts 顶部):

import "../instrument.server.mjs";
对每项已商定的功能

逐项处理功能。加载参考文件,严格按照步骤操作,并在继续之前进行验证:

功能参考文件在以下情况下加载……
错误监控${SKILL_ROOT}/references/error-monitoring.md始终加载
跟踪${SKILL_ROOT}/references/tracing.md需要查看路由/API 性能时
会话回放${SKILL_ROOT}/references/session-replay.md面向用户的应用
日志${SKILL_ROOT}/references/logging.md需要结构化日志和关联信息时
用户反馈${SKILL_ROOT}/references/user-feedback.md需要收集应用内反馈时
TanStack Start 功能${SKILL_ROOT}/references/tanstackstart-features.md涉及服务器入口、Vite 插件、源映射、运行时启动时

对于每项功能:Read ${SKILL_ROOT}/references/<feature>.md,严格按照步骤操作,并验证其是否正常工作。


配置参考

Sentry.init() 的关键选项
选项类型默认值备注
dsnstring—必填;为空时 SDK 会被禁用
dataCollectionobject未设置时采用保守默认值精细控制自动收集的类别(userInfo、cookies、httpHeaders、httpBodies、queryParams、genAI)。省略此项时,SDK 会回退到 sendDefaultPii(默认值为 false)。传入此对象(即使是 {})也会将未设置类别切换为宽松默认值;可按类别选择退出。
integrationsIntegration[]SDK 默认值按需包含 TanStack Router 跟踪、回放和反馈
enableLogsbooleanfalse启用 Sentry.logger.* API
tracesSampleRatenumber—开发环境中为 1.0,生产环境中设为较低值
replaysSessionSampleRatenumber—录制的所有会话所占比例
replaysOnErrorSampleRatenumber—录制的错误会话所占比例
tunnelstring—可选的广告拦截器绕过端点
debugbooleanfalseSDK 诊断日志
TanStack Start 专用 API
API用途
tanstackRouterBrowserTracingIntegration(router)浏览器导航跟踪
wrapFetchWithSentry(...)在 fetch 处理程序上进行服务器请求跟踪和错误捕获
sentryGlobalRequestMiddleware捕获请求级服务器错误
sentryGlobalFunctionMiddleware捕获服务器函数错误
sentryTanstackStart({...})用于源映射和中间件插桩的 Vite 插件

验证

触发测试事件,以确认 Sentry 收到数据。

问题测试(前端)
<button
  type="button"
  onClick={() => {
    throw new Error("Sentry Test Error");
  }}
>
  Break the world
</button>
跟踪测试(前端 + API 路由)
<button
  type="button"
  onClick={async () => {
    await Sentry.startSpan({ name: "Example Frontend Span", op: "test" }, async () => {
      const res = await fetch("/api/sentry-example");
      if (!res.ok) {
        throw new Error("Sentry Example Frontend Error");
      }
    });
  }}
>
  Break the world
</button>
日志测试
Sentry.logger.info("User example action completed");
Sentry.logger.warn("Slow operation detected", { operation: "data_fetch", duration: 3500 });
Sentry.logger.error("Validation failed", { field: "email", reason: "Invalid email" });

在 Sentry 中确认:

  • 问题:显示前端/服务器错误
  • 跟踪:显示浏览器和服务器跨度
  • 回放:启用后显示会话回放
  • 日志:enableLogs: true 时显示日志行
  • 用户反馈:启用反馈集成后显示提交内容

第 4 阶段:交叉链接

完成 TanStack Start 设置后,检查是否存在尚未配置 Sentry 的配套后端:

ls ../backend ../server ../api ../go ../python 2>/dev/null
cat ../go.mod ../requirements.txt ../pyproject.toml ../Gemfile ../pom.xml 2>/dev/null | head -5

如果存在未配置 Sentry 的后端,则建议匹配的技能:

检测到的后端建议技能
Go(go.mod)sentry-go-sdk
Python(requirements.txt、pyproject.toml)sentry-python-sdk
Ruby(Gemfile)sentry-ruby-sdk
Java(pom.xml、build.gradle)使用 @sentry/java 文档
Node.js 后端服务sentry-node-sdk

故障排除

问题解决方案
未显示事件设置 debug: true,验证 DSN,并确保客户端和服务端初始化文件都已运行
没有服务端跟踪确认 src/server.ts 使用了 wrapFetchWithSentry,且运行时加载了 instrument.server.mjs
路由处理程序中的服务端错误缺失确保 sentryGlobalRequestMiddleware 和 sentryGlobalFunctionMiddleware 位于数组首位
Source map 无法解析验证 sentryTanstackStart 配置中的 SENTRY_AUTH_TOKEN、org 和 project
Vite 配置中 SENTRY_AUTH_TOKEN 未定义使用 loadEnv(mode, process.cwd(), "") 或 .env.sentry-build-plugin
Replay 未录制确保 integrations 中包含 replayIntegration(),且采样率不为零
反馈小组件不可见确认已配置 feedbackIntegration(),并检查 CSS z-index 冲突
Sentry 中缺少日志设置 enableLogs: true 并使用 Sentry.logger.* API
直接导入设置遗漏库的跟踪信息尽可能优先使用 --import 启动方式;直接导入仅支持原生 Node 插桩
SSR 渲染异常未自动捕获在错误边界/回退处理程序中使用 Sentry.captureException 手动捕获

评论

支持 Markdown