Files
claude-relay-service/web/admin-spa/vite.config.js
千羽 8a74bf5afe refactor: standardize code formatting and linting configuration
- Replace .eslintrc.js with .eslintrc.cjs for better ES module compatibility
- Add .prettierrc configuration for consistent code formatting
- Update package.json with new lint and format scripts
- Add nodemon.json for development hot reloading configuration
- Standardize code formatting across all JavaScript and Vue files
- Update web admin SPA with improved linting rules and formatting
- Add prettier configuration to web admin SPA

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-07 18:19:31 +09:00

128 lines
3.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import checker from 'vite-plugin-checker'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import { fileURLToPath, URL } from 'node:url'
export default defineConfig(({ mode }) => {
// 加载环境变量
const env = loadEnv(mode, process.cwd(), '')
const apiTarget = env.VITE_API_TARGET || 'http://localhost:3000'
const httpProxy = env.VITE_HTTP_PROXY || env.HTTP_PROXY || env.http_proxy
// 使用环境变量配置基础路径,如果未设置则使用默认值
const basePath = env.VITE_APP_BASE_URL || (mode === 'development' ? '/admin/' : '/admin-next/')
// 创建代理配置
const proxyConfig = {
target: apiTarget,
changeOrigin: true,
secure: false
}
// 如果设置了代理,动态导入并配置 agent仅在开发模式下
if (httpProxy && mode === 'development') {
console.log(`Using HTTP proxy: ${httpProxy}`)
// Vite 的 proxy 使用 http-proxy它支持通过环境变量自动使用代理
// 设置环境变量让 http-proxy 使用代理
process.env.HTTP_PROXY = httpProxy
process.env.HTTPS_PROXY = httpProxy
}
console.log(
`${mode === 'development' ? 'Starting dev server' : 'Building'} with base path: ${basePath}`
)
return {
base: basePath,
plugins: [
vue(),
checker({
eslint: {
lintCommand: 'eslint "./src/**/*.{js,vue}" --cache=false',
dev: {
logLevel: ['error', 'warning']
}
}
}),
AutoImport({
resolvers: [ElementPlusResolver()],
imports: ['vue', 'vue-router', 'pinia']
}),
Components({
resolvers: [ElementPlusResolver()]
})
],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
}
},
server: {
port: 3001,
host: true,
open: true,
proxy: {
// 统一的 API 代理规则 - 开发环境所有 API 请求都加 /webapi 前缀
'/webapi': {
...proxyConfig,
rewrite: (path) => path.replace(/^\/webapi/, ''), // 转发时去掉 /webapi 前缀
configure: (proxy, options) => {
proxy.on('proxyReq', (proxyReq, req) => {
console.log(
'Proxying:',
req.method,
req.url,
'->',
options.target + req.url.replace(/^\/webapi/, '')
)
})
proxy.on('error', (err) => {
console.log('Proxy error:', err)
})
}
},
// API Stats 专用代理规则
'/apiStats': {
...proxyConfig,
configure: (proxy, options) => {
proxy.on('proxyReq', (proxyReq, req) => {
console.log(
'API Stats Proxying:',
req.method,
req.url,
'->',
options.target + req.url
)
})
}
}
}
},
build: {
outDir: 'dist',
assetsDir: 'assets',
rollupOptions: {
output: {
manualChunks(id) {
// 将 vue 相关的库打包到一起
if (id.includes('node_modules')) {
if (id.includes('element-plus')) {
return 'element-plus'
}
if (id.includes('chart.js')) {
return 'chart'
}
if (id.includes('vue') || id.includes('pinia') || id.includes('vue-router')) {
return 'vue-vendor'
}
return 'vendor'
}
}
}
}
}
}
})