diff --git a/next.config.js b/next.config.js index fd9dac0..44ed58e 100644 --- a/next.config.js +++ b/next.config.js @@ -1,6 +1,8 @@ /** @type {import('next').NextConfig} */ /* eslint-disable @typescript-eslint/no-var-requires */ +const { PHASE_DEVELOPMENT_SERVER } = require('next/constants'); + // 检测是否为 Cloudflare Pages 构建 const isCloudflare = process.env.CF_PAGES === '1' || process.env.BUILD_TARGET === 'cloudflare'; @@ -9,6 +11,9 @@ const optimizedPackageImports = [ '@dnd-kit/modifiers', '@dnd-kit/sortable', '@dnd-kit/utilities', + '@heroicons/react', + 'lucide-react', + 'react-icons', ]; const serverExternalPackages = [ @@ -24,7 +29,10 @@ const serverExternalPackages = [ 'xpath', ]; -const nextConfig = { +const createNextConfig = (phase) => { + const isDevelopment = phase === PHASE_DEVELOPMENT_SERVER || process.env.NODE_ENV === 'development'; + + const nextConfig = { // Cloudflare Pages 不支持 standalone,使用默认输出 output: isCloudflare ? undefined : 'standalone', eslint: { @@ -117,11 +125,17 @@ const nextConfig = { }, }; -const withPWA = require('next-pwa')({ - dest: 'public', - disable: process.env.NODE_ENV === 'development', - register: true, - skipWaiting: true, -}); + if (isDevelopment) { + return nextConfig; + } -module.exports = withPWA(nextConfig); + const withPWA = require('next-pwa')({ + dest: 'public', + register: true, + skipWaiting: true, + }); + + return withPWA(nextConfig); +}; + +module.exports = createNextConfig; diff --git a/src/lib/utils.ts b/src/lib/utils.ts index 3396eda..bfd7920 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -1,7 +1,6 @@ /* eslint-disable @typescript-eslint/no-explicit-any,no-console */ import bs58 from 'bs58'; import he from 'he'; -import Hls from 'hls.js'; export type DoubanImageProxyType = | 'direct' @@ -509,6 +508,8 @@ export async function getVideoResolutionFromM3u8( bitrate: string; // 视频码率(如 "2.5 Mbps") }> { try { + const { default: Hls } = await import('hls.js'); + // 直接使用m3u8 URL作为视频源,避免CORS问题 return new Promise((resolve, reject) => { const video = document.createElement('video');