| 123456789101112131415161718192021222324252627282930313233343536 |
- import { VENDOR_CHUNKS } from './chunks';
- import type { BuildOptions } from 'vite';
- /**
- * 浏览器支持基线(esbuild target 语法):chrome87/safari13/firefox78/edge88 这条老线。
- * 仅用于 build.cssTarget(CSS 的压缩/降级目标)——build.target 不设,JS 语法降级交给 legacy() 用 Babel 处理。
- * 注:legacy() 的 targets 用 browserslist 语法('safari >= 13')表达同一条基线,二者需保持一致。
- */
- export const CSS_TARGET = ['chrome87', 'safari13', 'firefox78', 'edge88'];
- /**
- * 构建配置。依赖渲染模式(isCSR)与环境(isProd),故以工厂函数导出。
- * @param isCSR 是否 CSR 模式。CSR 单环境构建,需显式 outDir 与内联 manualChunks;
- * SSG 由 react-router.config.ts 接管 outDir,分包经 clientChunksPlugin 注入。
- * @param isProd 是否生产构建。生产关闭 sourcemap。
- */
- export function createBuildOptions(isCSR: boolean, isProd: boolean): BuildOptions {
- return {
- // CSR:输出到 dist(无 react-router.config 管理,需显式指定)。
- // SSG:输出目录由 react-router.config.ts 的 buildDirectory 接管(dist/client、dist/server),此处不设。
- ...(isCSR ? { outDir: 'dist' } : {}),
- sourcemap: !isProd,
- // build.target 不设:JS 现代 chunk 走 vite 默认基线,语法降级由 legacy() 用 Babel 处理。
- // CSS 不经 legacy 处理,故显式指定 cssTarget 到老浏览器基线(与 legacy targets 对齐)。
- cssTarget: CSS_TARGET,
- rollupOptions: {
- output: {
- // CSR 单环境构建,vendor 分包直接在此声明(复用 VENDOR_CHUNKS);
- // SSG 此处留空,分包由 clientChunksPlugin 仅注入 client 环境。
- ...(isCSR ? { manualChunks: VENDOR_CHUNKS } : {}),
- },
- },
- chunkSizeWarningLimit: 1500,
- };
- }
|