86 lines
2.2 KiB
JavaScript
86 lines
2.2 KiB
JavaScript
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;
|