import type { NextConfig } from "next"; const nextConfig: NextConfig = { allowedDevOrigins: ['fkvqw4ggh2gdubpe.t.660325.xyz', 'vvqx.maxfight.vip'], // 启用压缩 compress: true, // 优化图片加载 images: { formats: ['image/avif', 'image/webp'], deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840], imageSizes: [16, 32, 48, 64, 96, 128, 256, 384], minimumCacheTTL: 31536000, // 1年缓存 }, // 优化打包 webpack: (config, { isServer }) => { // 优化SVG处理 config.module.rules.push({ test: /\.svg$/, use: ['@svgr/webpack'], }); return config; }, // 启用React严格模式 reactStrictMode: true, // 独立输出(Docker部署) output: 'standalone', // 启用实验性功能 experimental: { optimizePackageImports: ['@heroui/react'], }, // 代理 API 请求到后端,避免浏览器直连 localhost:8080 async rewrites() { const backendUrl = process.env.BACKEND_URL || 'http://localhost:8080'; return [ { source: '/api/:path*', destination: `${backendUrl}/api/:path*`, }, { source: '/uploads/:path*', destination: `${backendUrl}/uploads/:path*`, }, ]; }, // 设置HTTP缓存头 async headers() { return [ { source: '/icons/:path*', headers: [ { key: 'Cache-Control', value: 'public, max-age=31536000, immutable', }, ], }, { source: '/logos/:path*', headers: [ { key: 'Cache-Control', value: 'public, max-age=31536000, immutable', }, ], }, { source: '/assets/:path*', headers: [ { key: 'Cache-Control', value: 'public, max-age=31536000, immutable', }, ], }, { source: '/components/:path*', headers: [ { key: 'Cache-Control', value: 'public, max-age=31536000, immutable', }, ], }, { source: '/:path*', headers: [ { key: 'X-Frame-Options', value: 'DENY' }, { key: 'X-Content-Type-Options', value: 'nosniff' }, { key: 'Referrer-Policy', value: 'strict-origin-when-cross-origin' }, { key: 'Permissions-Policy', value: 'camera=(), microphone=(), geolocation=()' }, ], }, ]; }, }; export default nextConfig;