/** * Next应用配置。为webpack与Turbopack安装相同ReactFlow编译扩展,并给带内容摘要的图标分片设置长期缓存。 * 此处只配置应用编译/响应头,不改变headless SDK导出或服务端数据协议。 */ import type { NextConfig } from "next"; /** StrictMode显式开启开发检查,poweredByHeader关闭Next标识响应头;其余保持框架默认行为。 */ const config: NextConfig = { reactStrictMode: true, poweredByHeader: false, /** 在现有规则后追加匹配ReactFlow ESM入口的loader,再返回原配置对象,保留框架其它规则。 */ webpack(config) { config.module.rules.push({ test: /[\\/]@xyflow[\\/]react[\\/]dist[\\/]esm[\\/]index\.(?:mjs|js)$/, use: [{ loader: require.resolve("./scripts/loaders/xyflow-retained.cjs") }], }); return config; }, // Turbopack使用条件路径匹配同一个入口;单独配置以免切换构建器时丢失保留节点扩展。 turbopack: { rules: { "*": { condition: { path: /[\\/]@xyflow[\\/]react[\\/]dist[\\/]esm[\\/]index\.(?:mjs|js)$/ }, loaders: ["./scripts/loaders/xyflow-retained.cjs"], }, }, }, /** 只给版本目录内带12位十六进制摘要的JSON分片配置一年immutable缓存,文件内容变化应生成新文件名。 * 不对图标目录manifest、页面或全部JSON一概设置immutable。 */ async headers() { return [{ source: "/canvas-icons/:version/:asset([a-z0-9-]+-[a-f0-9]{12}\\.json)", headers: [{ key: "Cache-Control", value: "public, max-age=31536000, immutable" }], }]; }, }; export default config;