提交 3e375704 作者: 方治民

feat: 新增 sentry 配置

上级 61f36e21
...@@ -35,3 +35,9 @@ VITE_USE_PWA = false ...@@ -35,3 +35,9 @@ VITE_USE_PWA = false
# Is it compatible with older browsers # Is it compatible with older browsers
VITE_LEGACY = false VITE_LEGACY = false
# Sentry
VITE_SENTRY_URL=https://sentry.yiring.com
VITE_SENTRY_ORG=yiring
VITE_SENTRY_PROJECT=basic-vue-admin
VITE_SENTRY_DSN=https://72b9b829b2dfbb2379e94c7cbd3609e7@sentry.yiring.com/16
...@@ -31,3 +31,9 @@ pnpm-debug.log* ...@@ -31,3 +31,9 @@ pnpm-debug.log*
.mocks .mocks
.history .history
# Sentry Config File
.env.sentry-build-plugin
# Sentry Config File
.env.sentry-build-plugin
...@@ -49,12 +49,12 @@ ...@@ -49,12 +49,12 @@
"editor.defaultFormatter": "esbenp.prettier-vscode" "editor.defaultFormatter": "esbenp.prettier-vscode"
}, },
"editor.codeActionsOnSave": { "editor.codeActionsOnSave": {
"source.fixAll.eslint": true "source.fixAll.eslint": "explicit"
}, },
"[vue]": { "[vue]": {
"editor.codeActionsOnSave": { "editor.codeActionsOnSave": {
"source.fixAll.eslint": true, "source.fixAll.eslint": "explicit",
"source.fixAll.stylelint": true "source.fixAll.stylelint": "explicit"
} }
}, },
......
// #!/usr/bin/env node // #!/usr/bin/env node
import fs from 'node:fs'
import process from 'node:process' import process from 'node:process'
import colors from 'picocolors' import colors from 'picocolors'
import pkg from '../../package.json' import pkg from '../../package.json'
import { getRootPath } from '../utils'
import { OUTPUT_DIR } from '../constant'
import { runBuildConfig } from './buildConf' import { runBuildConfig } from './buildConf'
export async function runBuild() { export async function runBuild() {
...@@ -15,6 +18,15 @@ export async function runBuild() { ...@@ -15,6 +18,15 @@ export async function runBuild() {
runBuildConfig() runBuildConfig()
} }
// 递归删除 dist 目录下的 map 后缀文件
const dir = getRootPath(OUTPUT_DIR)
const files = fs.readdirSync(dir)
files.forEach((file) => {
if (file.endsWith('.map')) {
fs.unlinkSync(`${dir}/${file}`)
}
})
console.log(`✨ ${colors.cyan(`[${pkg.name}]`)}` + ' - build successfully!') console.log(`✨ ${colors.cyan(`[${pkg.name}]`)}` + ' - build successfully!')
} catch (error) { } catch (error) {
console.log(colors.red(`vite build error:\n${error}`)) console.log(colors.red(`vite build error:\n${error}`))
......
...@@ -16,6 +16,7 @@ import { configVisualizerConfig } from './visualizer' ...@@ -16,6 +16,7 @@ import { configVisualizerConfig } from './visualizer'
import { configThemePlugin } from './theme' import { configThemePlugin } from './theme'
import { configSvgIconsPlugin } from './svgSprite' import { configSvgIconsPlugin } from './svgSprite'
import { configAutoImportPlugin } from './autoImport' import { configAutoImportPlugin } from './autoImport'
import { configSentryPlugin } from './sentry'
export function createVitePlugins(viteEnv: ViteEnv, isBuild: boolean) { export function createVitePlugins(viteEnv: ViteEnv, isBuild: boolean) {
const { VITE_USE_MOCK, VITE_LEGACY, VITE_BUILD_COMPRESS, VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE } = viteEnv const { VITE_USE_MOCK, VITE_LEGACY, VITE_BUILD_COMPRESS, VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE } = viteEnv
...@@ -74,6 +75,9 @@ export function createVitePlugins(viteEnv: ViteEnv, isBuild: boolean) { ...@@ -74,6 +75,9 @@ export function createVitePlugins(viteEnv: ViteEnv, isBuild: boolean) {
// vite-plugin-pwa // vite-plugin-pwa
vitePlugins.push(configPwaConfig(viteEnv)) vitePlugins.push(configPwaConfig(viteEnv))
} }
// Sentry
vitePlugins.push(configSentryPlugin(viteEnv))
} }
return vitePlugins return vitePlugins
......
import process from 'node:process'
import type { SentryVitePluginOptions } from '@sentry/vite-plugin'
import { sentryVitePlugin } from '@sentry/vite-plugin'
import colors from 'picocolors'
import pkg from '../../../package.json'
import { OUTPUT_DIR } from '../../constant'
export function configSentryPlugin(env: ViteEnv) {
const config: SentryVitePluginOptions = {
org: env.VITE_SENTRY_ORG,
project: env.VITE_SENTRY_PROJECT,
url: env.VITE_SENTRY_URL,
authToken: process.env.SENTRY_AUTH_TOKEN,
release: {
name: `${pkg.name}@${pkg.version}`,
},
sourcemaps: {
filesToDeleteAfterUpload: [`${OUTPUT_DIR}/**/*.js.map`],
},
debug: true,
}
console.log(`✨ ${colors.cyan(`[Sentry]`)} config`, config)
return sentryVitePlugin(config)
}
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
"serve": "npm run dev", "serve": "npm run dev",
"dev": "vite", "dev": "vite",
"build": "vite build && esno ./build/script/postBuild.ts", "build": "vite build && esno ./build/script/postBuild.ts",
"postbuild": "rimraf -g ./dist/**/*.map",
"build:test": "vite build --mode test", "build:test": "vite build --mode test",
"build:preview": "vite build --mode preview", "build:preview": "vite build --mode preview",
"build:no-cache": "pnpm clean:cache && npm run build", "build:no-cache": "pnpm clean:cache && npm run build",
...@@ -59,6 +60,7 @@ ...@@ -59,6 +60,7 @@
"@iconify/iconify": "^3.1.1", "@iconify/iconify": "^3.1.1",
"@logicflow/core": "^1.2.15", "@logicflow/core": "^1.2.15",
"@logicflow/extension": "^1.2.16", "@logicflow/extension": "^1.2.16",
"@sentry/vue": "^7.107.0",
"@stomp/stompjs": "^7.0.0", "@stomp/stompjs": "^7.0.0",
"@vue/runtime-core": "^3.3.4", "@vue/runtime-core": "^3.3.4",
"@vue/shared": "^3.3.4", "@vue/shared": "^3.3.4",
...@@ -103,6 +105,8 @@ ...@@ -103,6 +105,8 @@
"@commitlint/cli": "^17.7.2", "@commitlint/cli": "^17.7.2",
"@commitlint/config-conventional": "^17.7.0", "@commitlint/config-conventional": "^17.7.0",
"@iconify/json": "^2.2.125", "@iconify/json": "^2.2.125",
"@sentry/cli": "^2.30.2",
"@sentry/vite-plugin": "^2.15.0",
"@types/codemirror": "^5.60.10", "@types/codemirror": "^5.60.10",
"@types/crypto-js": "^4.1.2", "@types/crypto-js": "^4.1.2",
"@types/fs-extra": "^11.0.2", "@types/fs-extra": "^11.0.2",
......
...@@ -170,6 +170,7 @@ export function setupErrorHandle(app: App) { ...@@ -170,6 +170,7 @@ export function setupErrorHandle(app: App) {
if (!useErrorHandle) { if (!useErrorHandle) {
return return
} }
// Vue exception monitoring; // Vue exception monitoring;
app.config.errorHandler = vueErrorHandler app.config.errorHandler = vueErrorHandler
......
...@@ -6,6 +6,7 @@ import 'virtual:windi-utilities.css' ...@@ -6,6 +6,7 @@ import 'virtual:windi-utilities.css'
// Register icon sprite // Register icon sprite
import 'virtual:svg-icons-register' import 'virtual:svg-icons-register'
import { createApp } from 'vue' import { createApp } from 'vue'
import * as Sentry from '@sentry/vue'
import App from './App.vue' import App from './App.vue'
import { initAppConfigStore } from '/@/logics/initAppConfig' import { initAppConfigStore } from '/@/logics/initAppConfig'
import { setupErrorHandle } from '/@/logics/error-handle' import { setupErrorHandle } from '/@/logics/error-handle'
...@@ -16,8 +17,7 @@ import { setupGlobDirectives } from '/@/directives' ...@@ -16,8 +17,7 @@ import { setupGlobDirectives } from '/@/directives'
import { setupI18n } from '/@/locales/setupI18n' import { setupI18n } from '/@/locales/setupI18n'
import { setupAppConfig } from '/@/config/app' import { setupAppConfig } from '/@/config/app'
import { registerGlobComp } from '/@/components/registerGlobComp' import { registerGlobComp } from '/@/components/registerGlobComp'
import { isDevMode, isProdMode } from './utils/env'
import { isDevMode } from './utils/env'
// fix: Added non-passive event listener to a scroll-blocking 'wheel' event // fix: Added non-passive event listener to a scroll-blocking 'wheel' event
// import 'default-passive-events' // import 'default-passive-events'
...@@ -29,6 +29,20 @@ if (isDevMode()) { ...@@ -29,6 +29,20 @@ if (isDevMode()) {
async function bootstrap() { async function bootstrap() {
const app = createApp(App) const app = createApp(App)
// Sentry
if (isProdMode()) {
Sentry.init({
app,
dsn: import.meta.env.VITE_SENTRY_DSN,
integrations: [Sentry.browserTracingIntegration(), Sentry.replayIntegration()],
// Performance Monitoring
tracesSampleRate: 1.0,
// Session Replay
replaysSessionSampleRate: 0.1,
replaysOnErrorSampleRate: 1.0,
})
}
// 注册 App 配置 // 注册 App 配置
setupAppConfig(app) setupAppConfig(app)
......
...@@ -73,6 +73,13 @@ declare global { ...@@ -73,6 +73,13 @@ declare global {
VITE_LEGACY: boolean VITE_LEGACY: boolean
VITE_USE_IMAGEMIN: boolean VITE_USE_IMAGEMIN: boolean
VITE_GENERATE_UI: string VITE_GENERATE_UI: string
// Sentry
VITE_SENTRY_URL: string
VITE_SENTRY_TOKEN: string
VITE_SENTRY_ORG: string
VITE_SENTRY_PROJECT: string
VITE_SENTRY_DSN: string
} }
declare function parseInt(s: string | number, radix?: number): number declare function parseInt(s: string | number, radix?: number): number
......
...@@ -66,6 +66,8 @@ export default ({ command, mode }: ConfigEnv): UserConfig => { ...@@ -66,6 +66,8 @@ export default ({ command, mode }: ConfigEnv): UserConfig => {
// Turning off brotliSize display can slightly reduce packaging time // Turning off brotliSize display can slightly reduce packaging time
reportCompressedSize: false, reportCompressedSize: false,
chunkSizeWarningLimit: 2000, chunkSizeWarningLimit: 2000,
// Sentry upload sourcemap
sourcemap: true,
}, },
define: { define: {
// setting vue-i18-next // setting vue-i18-next
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论