Files
Space.Tab/vite.config.ts
2025-08-16 14:25:11 +08:00

101 lines
3.0 KiB
TypeScript

import path from 'node:path'
import tailwindcss from '@tailwindcss/vite'
import { defineConfig, loadEnv } from "vite"
import vue from "@vitejs/plugin-vue"
import { resolve } from 'path'
import { copyFileSync, mkdirSync, existsSync } from 'fs'
// https://vitejs.dev/config/
export default defineConfig(({ mode }) => {
// 加载环境变量
const env = loadEnv(mode, process.cwd(), '')
return {
plugins: [
vue({
template: {
compilerOptions: {
// 将 spline-viewer 标记为自定义元素,避免 Vue 尝试解析它
isCustomElement: (tag) => tag === 'spline-viewer'
}
}
}),
tailwindcss(),
// 自定义插件,用于复制扩展必要文件到构建目录
{
name: 'copy-extension-files',
buildEnd() {
// 复制 manifest.json
copyFileSync('src/manifest.json', 'dist/manifest.json');
console.log('Manifest file copied to dist folder');
// 复制 background.js
copyFileSync('src/background.js', 'dist/background.js');
console.log('Background script copied to dist folder');
// 创建图标目录
if (!fs.existsSync('dist/icons')) {
fs.mkdirSync('dist/icons', { recursive: true });
}
// 复制图标文件(如果存在)
const iconSizes = [16, 32, 48, 128];
iconSizes.forEach(size => {
const iconPath = `src/icons/icon${size}.png`;
if (fs.existsSync(iconPath)) {
copyFileSync(iconPath, `dist/icons/icon${size}.png`);
console.log(`Icon ${size}px copied to dist folder`);
}
});
}
}
],
resolve: {
alias: {
"@": path.resolve(__dirname, "./src/client"),
},
},
server: {
port: 5173,
proxy: {
// 代理所有 /api 请求到后端
'/api': {
target: 'http://localhost:3001',
changeOrigin: true,
secure: false,
},
// 代理高德地图API请求
'/amap-api': {
target: 'https://restapi.amap.com',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/amap-api/, ''),
secure: false,
},
},
allowedHosts: ['space.lingke.ink'],
},
build: {
// 浏览器扩展特定配置
outDir: 'dist',
emptyOutDir: true,
rollupOptions: {
input: {
main: resolve(__dirname, 'index.html')
},
output: {
entryFileNames: 'assets/[name].js',
chunkFileNames: 'assets/[name].js',
assetFileNames: 'assets/[name].[ext]'
}
}
},
define: {
__VUE_OPTIONS_API__: true,
__VUE_PROD_DEVTOOLS__: false,
// 确保环境变量可用于客户端
'import.meta.env.NEXT_PUBLIC_SUPABASE_URL': JSON.stringify(env.NEXT_PUBLIC_SUPABASE_URL),
'import.meta.env.NEXT_PUBLIC_SUPABASE_ANON_KEY': JSON.stringify(env.NEXT_PUBLIC_SUPABASE_ANON_KEY)
}
}
});