import nextPWA from '@ducanh2912/next-pwa'; import analyzer from '@next/bundle-analyzer'; const isProd = process.env.NODE_ENV === 'production'; const buildWithDocker = process.env.DOCKER === 'true'; // if you need to proxy the api endpoint to remote server const API_PROXY_ENDPOINT = process.env.API_PROXY_ENDPOINT || ''; const basePath = process.env.NEXT_PUBLIC_BASE_PATH; const docsBasePath = process.env.NEXT_PUBLIC_LOBE_CHAT_DOCS || ''; const withBundleAnalyzer = analyzer({ enabled: process.env.ANALYZE === 'true', }); const withPWA = nextPWA({ dest: 'public', register: true, workboxOptions: { skipWaiting: true, }, }); /** @type {import('next').NextConfig} */ const nextConfig = { compress: isProd, basePath, experimental: { optimizePackageImports: [ 'emoji-mart', '@emoji-mart/react', '@emoji-mart/data', '@icons-pack/react-simple-icons', '@lobehub/ui', 'gpt-tokenizer', 'chroma-js', ], webVitalsAttribution: ['CLS', 'LCP'], }, images: { remotePatterns: [ { hostname: 'registry.npmmirror.com', pathname: '/@lobehub/**', port: '', protocol: 'https', }, ], unoptimized: !isProd, }, output: buildWithDocker ? 'standalone' : undefined, rewrites: async () => [ // due to google api not work correct in some countries // we need a proxy to bypass the restriction { source: '/api/chat/google', destination: `${API_PROXY_ENDPOINT}/api/chat/google` }, { source: '/docs', destination: `${docsBasePath}/docs` }, { source: '/docs/zh', destination: `${docsBasePath}/docs/zh` }, { source: '/docs/en', destination: `${docsBasePath}/docs/en` }, { source: '/docs/:path*', destination: `${docsBasePath}/docs/:path*` } ], reactStrictMode: true, webpack(config) { config.experiments = { asyncWebAssembly: true, layers: true, }; // to fix shikiji compile error // refs: https://github.com/antfu/shikiji/issues/23 config.module.rules.push({ test: /\.m?js$/, type: 'javascript/auto', resolve: { fullySpecified: false, }, }); return config; }, }; export default isProd ? withBundleAnalyzer(withPWA(nextConfig)) : nextConfig;