Phase 1 配置基线:next.config.ts 新增 experimental.optimizePackageImports(lucide-react/recharts/@xyflow/react/@tiptap/* /@radix-ui/*/date-fns)+ serverExternalPackages 追加 tencentcloud-sdk-nodejs + exceljs;providers.tsx 注入 WebVitalsReporter 闭环 RUM 上报链路(之前组件存在但未注入导致生产环境零性能数据)。 Phase 2 Bundle 预算优化补漏:TipTap 三实例(shared/ui/rich-text-editor + exams/editor/exam-rich-editor + lesson-preparation/blocks/rich-text-block)之前仅文件拆分未真正 next/dynamic ssr:false,本次补齐 lazy wrapper + xxx-inner.tsx 拆分模式;ReactFlow knowledge-graph.tsx 改用 next/dynamic 加载 inner;chart.tsx 改 recharts 具名导入替代 import * as RechartsPrimitive barrel。 Phase 4 组件渲染优化补漏:12 个 recharts 图表组件(parent/grades/dashboard/homework 模块下)margin props 提取到模块级 CHART_MARGIN 常量避免 inline 重建;layout.tsx metadata 增强(metadataBase/openGraph/twitter/robots/authors/creator)+ getLocale/getMessages/auth 串行 await 改 Promise.all 并行。 同步架构文档 004/005 + known-issues.md:新增 Phase 1 配置基线规则章节 + Phase 2 文件清单修正(之前引用不存在的 question-rich-editor.tsx 和 paper-rich-editor.tsx,实际是 rich-text-editor.tsx 和 rich-text-block.tsx)+ Phase 4.9 metadata + Promise.all 规则补充。架构图 1.1.5 章节新增未完成项(React Compiler/force-dynamic 评估/Playwright 性能断言)。 验证:npx tsc --noEmit 零错误;npm run lint 零新增错误(3 errors + 12 warnings 均位于未修改的 pre-existing 文件)。
47 lines
1.6 KiB
TypeScript
47 lines
1.6 KiB
TypeScript
import type { NextConfig } from "next";
|
|
import createNextIntlPlugin from "next-intl/plugin";
|
|
|
|
const withNextIntl = createNextIntlPlugin("./src/i18n/request.ts");
|
|
|
|
const nextConfig: NextConfig = {
|
|
output: "standalone",
|
|
// 服务端 Node.js 原生模块,不应被 Turbopack 打包到 server bundle。
|
|
// - mysql2: Node.js MySQL 驱动,依赖 net/tls
|
|
// - tencentcloud-sdk-nodejs: 腾讯云 SDK,体积 ~2-3 MB,仅在短信/对象存储等服务端调用
|
|
// - exceljs: Excel 生成库,体积 ~250-300 KB,仅在导出报表时使用
|
|
serverExternalPackages: [
|
|
"mysql2",
|
|
"tencentcloud-sdk-nodejs",
|
|
"exceljs",
|
|
],
|
|
experimental: {
|
|
// 启用 optimizePackageImports 让 Turbopack 对 barrel 导出做精确 tree-shaking,
|
|
// 避免整个库被打入首屏 chunk。覆盖项目中最常用的重型库:
|
|
// - lucide-react: 图标库,barrel 导出 1000+ 图标
|
|
// - recharts: 图表库,barrel 导出 20+ 组件
|
|
// - @xyflow/react: ReactFlow,barrel 导出 30+ 模块
|
|
// - @tiptap/*: 富文本编辑器,多个 barrel 包
|
|
// - @radix-ui/*: 无障碍 UI 原语,barrel 导出
|
|
// - date-fns: 日期工具,barrel 导出 200+ 函数
|
|
optimizePackageImports: [
|
|
"lucide-react",
|
|
"recharts",
|
|
"@xyflow/react",
|
|
"@tiptap/react",
|
|
"@tiptap/starter-kit",
|
|
"@tiptap/extension-placeholder",
|
|
"@tiptap/extension-image",
|
|
"tiptap-markdown",
|
|
"@radix-ui/react-dialog",
|
|
"@radix-ui/react-dropdown-menu",
|
|
"@radix-ui/react-popover",
|
|
"@radix-ui/react-select",
|
|
"@radix-ui/react-tabs",
|
|
"@radix-ui/react-tooltip",
|
|
"date-fns",
|
|
],
|
|
},
|
|
};
|
|
|
|
export default withNextIntl(nextConfig);
|