| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- const { codeInspectorPlugin } = require('code-inspector-plugin')
- const withPWA = require('next-pwa')({
- dest: 'public',
- register: true,
- skipWaiting: true,
- disable: process.env.NODE_ENV === 'development',
- fallbacks: {
- document: '/_offline.html',
- },
- runtimeCaching: [
- {
- urlPattern: /^https:\/\/fonts\.googleapis\.com\/.*/i,
- handler: 'CacheFirst',
- options: {
- cacheName: 'google-fonts',
- expiration: {
- maxEntries: 4,
- maxAgeSeconds: 365 * 24 * 60 * 60 // 1 year
- }
- }
- },
- {
- urlPattern: /^https:\/\/fonts\.gstatic\.com\/.*/i,
- handler: 'CacheFirst',
- options: {
- cacheName: 'google-fonts-webfonts',
- expiration: {
- maxEntries: 4,
- maxAgeSeconds: 365 * 24 * 60 * 60 // 1 year
- }
- }
- },
- {
- urlPattern: /\.(?:png|jpg|jpeg|svg|gif|webp|avif)$/i,
- handler: 'CacheFirst',
- options: {
- cacheName: 'images',
- expiration: {
- maxEntries: 64,
- maxAgeSeconds: 30 * 24 * 60 * 60 // 30 days
- }
- }
- },
- {
- urlPattern: /\.(?:js|css)$/i,
- handler: 'StaleWhileRevalidate',
- options: {
- cacheName: 'static-resources',
- expiration: {
- maxEntries: 32,
- maxAgeSeconds: 24 * 60 * 60 // 1 day
- }
- }
- },
- {
- urlPattern: /^\/api\/.*/i,
- handler: 'NetworkFirst',
- options: {
- cacheName: 'api-cache',
- networkTimeoutSeconds: 10,
- expiration: {
- maxEntries: 16,
- maxAgeSeconds: 60 * 60 // 1 hour
- }
- }
- }
- ]
- })
- const withMDX = require('@next/mdx')({
- extension: /\.mdx?$/,
- options: {
- // If you use remark-gfm, you'll need to use next.config.mjs
- // as the package is ESM only
- // https://github.com/remarkjs/remark-gfm#install
- remarkPlugins: [],
- rehypePlugins: [],
- // If you use `MDXProvider`, uncomment the following line.
- // providerImportSource: "@mdx-js/react",
- },
- })
- const withBundleAnalyzer = require('@next/bundle-analyzer')({
- enabled: process.env.ANALYZE === 'true',
- })
-
- // the default url to prevent parse url error when running jest
- const hasSetWebPrefix = process.env.NEXT_PUBLIC_WEB_PREFIX
- const port = process.env.PORT || 3000
- const locImageURLs = !hasSetWebPrefix ? [new URL(`http://localhost:${port}/**`), new URL(`http://127.0.0.1:${port}/**`)] : []
- const remoteImageURLs = [hasSetWebPrefix ? new URL(`${process.env.NEXT_PUBLIC_WEB_PREFIX}/**`) : '', ...locImageURLs].filter(item => !!item)
-
- /** @type {import('next').NextConfig} */
- const nextConfig = {
- basePath: process.env.NEXT_PUBLIC_BASE_PATH || '',
- transpilePackages: ['echarts', 'zrender'],
- turbopack: {
- rules: codeInspectorPlugin({
- bundler: 'turbopack'
- })
- },
- productionBrowserSourceMaps: false, // enable browser source map generation during the production build
- // Configure pageExtensions to include md and mdx
- pageExtensions: ['ts', 'tsx', 'js', 'jsx', 'md', 'mdx'],
- // https://nextjs.org/docs/messages/next-image-unconfigured-host
- images: {
- remotePatterns: remoteImageURLs.map(remoteImageURL => ({
- protocol: remoteImageURL.protocol.replace(':', ''),
- hostname: remoteImageURL.hostname,
- port: remoteImageURL.port,
- pathname: remoteImageURL.pathname,
- search: '',
- })),
- },
- experimental: {
- optimizePackageImports: [
- '@remixicon/react',
- '@heroicons/react'
- ],
- },
- // fix all before production. Now it slow the develop speed.
- eslint: {
- // Warning: This allows production builds to successfully complete even if
- // your project has ESLint errors.
- ignoreDuringBuilds: true,
- dirs: ['app', 'bin', 'config', 'context', 'hooks', 'i18n', 'models', 'service', 'test', 'types', 'utils'],
- },
- typescript: {
- // https://nextjs.org/docs/api-reference/next.config.js/ignoring-typescript-errors
- ignoreBuildErrors: true,
- },
- reactStrictMode: true,
- async redirects() {
- return [
- {
- source: '/',
- destination: '/apps',
- permanent: false,
- },
- ]
- },
- output: 'standalone',
- }
-
- module.exports = withPWA(withBundleAnalyzer(withMDX(nextConfig)))
|