/** * portal-shell Next.js 配置(v2.1 M8) * * 角色:插件化仪表盘宿主(单 Next.js App Router · 单 Docker) * - output: standalone(单容器部署) * - transpilePackages: @edu/* workspace 包 * - 反向代理:/api/v1/* → api-gateway :8080(JWT 校验 + 注入 x-user-id/x-user-role) * - GraphQL 查询走 apollo-router :3000(M8 验收点,由 Apollo Client 直连) * * 关联:portal-shell spec §2、project_rules §3.2 */ /** @type {import('next').NextConfig} */ const nextConfig = { reactStrictMode: true, output: "standalone", transpilePackages: [ "@edu/ui-components", "@edu/ui-tokens", "@edu/hooks", "@edu/contracts", "@edu/shared-ts", ], experimental: { serverActions: { bodySizeLimit: "2mb" }, }, webpack(config) { // ESM 包使用 .js 后缀导入源码(TS 文件),需映射 .js → .ts config.resolve = config.resolve || {}; config.resolve.extensionAlias = { ...config.resolve.extensionAlias, ".js": [".ts", ".tsx", ".js"], }; return config; }, async rewrites() { const gateway = process.env.API_GATEWAY_URL || "http://localhost:8080"; return [ { source: "/api/v1/:path*", destination: `${gateway}/api/v1/:path*`, }, { source: "/api/auth/:path*", destination: `${gateway}/api/v1/iam/:path*`, }, ]; }, }; module.exports = nextConfig;