diff --git a/package-lock.json b/package-lock.json index 6691b43..61be5cc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "dependencies": { "@element-plus/icons-vue": "^2.0.10", "@msgpack/msgpack": "^3.1.2", + "@sentry/vue": "^10.20.0", "@vueuse/core": "^9.5.0", "autoprefixer": "^10.4.21", "axios": "^0.27.2", @@ -947,6 +948,96 @@ "win32" ] }, + "node_modules/@sentry-internal/browser-utils": { + "version": "10.20.0", + "resolved": "https://registry.npmmirror.com/@sentry-internal/browser-utils/-/browser-utils-10.20.0.tgz", + "integrity": "sha512-9+NybrYs+dEM2iW5uRAYEhKkNK0XhDea5jovtDUXEvdSCMJFcdR88uztkftnCur45/hpvbgSULsGPUdHPb5ITw==", + "dependencies": { + "@sentry/core": "10.20.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@sentry-internal/feedback": { + "version": "10.20.0", + "resolved": "https://registry.npmmirror.com/@sentry-internal/feedback/-/feedback-10.20.0.tgz", + "integrity": "sha512-R/eGLKl7WDccLKBorEbyTsy5b99w/k4v80SntE8HL2rsO7DCDXma8TGmtHd+iZnw8dUci+EVrw7LbeGSgf3QzA==", + "dependencies": { + "@sentry/core": "10.20.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@sentry-internal/replay": { + "version": "10.20.0", + "resolved": "https://registry.npmmirror.com/@sentry-internal/replay/-/replay-10.20.0.tgz", + "integrity": "sha512-+XPYp0CuJnf+c36/c+hHrY6wAPHCdnqllZeyU7+9LAiKsdhN8Oo4eF1v5zd097qDZBg1NrKhU44ScJIzz+vygw==", + "dependencies": { + "@sentry-internal/browser-utils": "10.20.0", + "@sentry/core": "10.20.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@sentry-internal/replay-canvas": { + "version": "10.20.0", + "resolved": "https://registry.npmmirror.com/@sentry-internal/replay-canvas/-/replay-canvas-10.20.0.tgz", + "integrity": "sha512-8DBawFi4F4e2Cu2ToiitCnYsK8idrDOv66Vq+N6c8e3qFitTTuoPQwOihb2+HY4CB06ABPW3WvfZntJJmsf91w==", + "dependencies": { + "@sentry-internal/replay": "10.20.0", + "@sentry/core": "10.20.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@sentry/browser": { + "version": "10.20.0", + "resolved": "https://registry.npmmirror.com/@sentry/browser/-/browser-10.20.0.tgz", + "integrity": "sha512-zcf8HwFiRbzjZL9KbLev44eEOf+yl+3svQbs2BlR2KAYGaB10swV5abij0UTTGO7ClnqUZdcGpwiyyfPS6mjHg==", + "dependencies": { + "@sentry-internal/browser-utils": "10.20.0", + "@sentry-internal/feedback": "10.20.0", + "@sentry-internal/replay": "10.20.0", + "@sentry-internal/replay-canvas": "10.20.0", + "@sentry/core": "10.20.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@sentry/core": { + "version": "10.20.0", + "resolved": "https://registry.npmmirror.com/@sentry/core/-/core-10.20.0.tgz", + "integrity": "sha512-S291KihnOIB8i7mVJIJBVHBMcCfIoY/KDJBHEfBoHY9M56g2An4FVhM9+/xR85+IoMkTySdXN08k9LEyQz4FpQ==", + "engines": { + "node": ">=18" + } + }, + "node_modules/@sentry/vue": { + "version": "10.20.0", + "resolved": "https://registry.npmmirror.com/@sentry/vue/-/vue-10.20.0.tgz", + "integrity": "sha512-3mWc81mLs1CpXrihuTQNXwt0HfOIy7BAZMvtYgaTuIDvooYtBbsZ+7yGDkcwsWBtfAvE7/yP2h95M4HRIw5KyQ==", + "dependencies": { + "@sentry/browser": "10.20.0", + "@sentry/core": "10.20.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "pinia": "2.x || 3.x", + "vue": "2.x || 3.x" + }, + "peerDependenciesMeta": { + "pinia": { + "optional": true + } + } + }, "node_modules/@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmmirror.com/@trysound/sax/-/sax-0.2.0.tgz", diff --git a/package.json b/package.json index 677725f..be7b118 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "dependencies": { "@element-plus/icons-vue": "^2.0.10", "@msgpack/msgpack": "^3.1.2", + "@sentry/vue": "^10.20.0", "@vueuse/core": "^9.5.0", "autoprefixer": "^10.4.21", "axios": "^0.27.2", diff --git a/src/main.js b/src/main.js index a67fc22..b1bd3ee 100644 --- a/src/main.js +++ b/src/main.js @@ -1,7 +1,7 @@ import { createApp } from 'vue' import { createPinia } from 'pinia' - +import * as Sentry from '@sentry/vue'; import { deepClone @@ -20,6 +20,31 @@ import router from './router' const pinia = createPinia() const app = createApp(App) +Sentry.init({ + app, + dsn: 'https://34a0d76174a64db09d31d13a8042560b@sentry.cnsdt.com/2', // 替换为你的 DSN + integrations: [ + // 浏览器性能追踪集成 + Sentry.browserTracingIntegration({ + router, + }), + // 会话回放集成 + Sentry.replayIntegration({ + maskAllText: false, + blockAllMedia: false, + }), + ], + // 性能监控采样率 + tracesSampleRate: 1.0, // 生产环境建议设置为 0.1-0.2 + // 会话回放采样率 + replaysSessionSampleRate: 0.1, + replaysOnErrorSampleRate: 1.0, + // 环境配置 + environment: import.meta.env.MODE, + // 开发环境下可禁用 Sentry + enabled: import.meta.env.PROD, + }); + for (const [key, component] of Object.entries(ElementPlusIconsVue)) { app.component(key, component) } diff --git a/vite.config.js b/vite.config.js index 7aced26..2843a28 100644 --- a/vite.config.js +++ b/vite.config.js @@ -2,7 +2,7 @@ import { fileURLToPath, URL } from 'node:url' import path from "path"; import { defineConfig ,loadEnv} from 'vite' import vue from '@vitejs/plugin-vue' -import createVitePlugins from './vite/plugins/index.js' +import createVitePlugins from './vite/plugins/index.js' // https://vite.dev/config/ export default defineConfig(({ mode, command }) => {