import type { NextConfig } from "next"; const nextConfig: NextConfig = { /* config options here */ reactStrictMode: false, productionBrowserSourceMaps: true, // CI build does not block on lint; run `npm run lint` as a separate stage if needed. eslint: { ignoreDuringBuilds: true }, images: { remotePatterns: [ { protocol: "https", hostname: "localhost", port: "4000", pathname: "/uploads/**" }, { protocol: "https", hostname: "api.antooza.com", pathname: "/uploads/**" }, { protocol: "https", hostname: "resource.antooza.com", pathname: "/uploads/**" }, { protocol: "https", hostname: "img.youtube.com" }, { protocol: "https", hostname: "yt3.ggpht.com" }, { protocol: "https", hostname: "yt3.googleusercontent.com" } ], }, experimental: { authInterrupts: true, // 인증 중단 기능 활성화 serverActions: { bodySizeLimit: '200mb' // 최대 요청 본문 크기 설정 }, // 배럴 임포트 트리셰이킹 — 아이콘/차트 라이브러리 first-load JS 축소 optimizePackageImports: [ 'recharts', '@fortawesome/free-solid-svg-icons', '@fortawesome/free-regular-svg-icons', '@fortawesome/free-brands-svg-icons', 'lucide-react' ] }, // 배포 최적화 output: 'standalone', // SVG 사용하기 위한 추가 webpack(config) { config.module.rules.push({ test: /\.svg$/, use: ['@svgr/webpack'], }); return config; }, async rewrites() { return [ { source: '/uploads/:path*', destination: '/api/uploads/:path*' } ]; }, async redirects() { return [ { source: '/docs/privacy', destination: '/docs/privacy-policy', permanent: true }, { source: '/docs/terms', destination: '/docs/terms-of-service', permanent: true } ]; } }; export default nextConfig;