| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- import path from 'path'
- import { fileURLToPath } from 'url'
- import { defineConfig, loadEnv } from '@rsbuild/core'
- import { pluginReact } from '@rsbuild/plugin-react'
- import { tanstackRouter } from '@tanstack/router-plugin/rspack'
- const __dirname = path.dirname(fileURLToPath(import.meta.url))
- export default defineConfig(({ envMode }) => {
- const env = loadEnv({ mode: envMode, prefixes: ['VITE_'] })
- const serverUrl =
- process.env.VITE_REACT_APP_SERVER_URL ||
- env.rawPublicVars.VITE_REACT_APP_SERVER_URL ||
- 'http://localhost:3000'
- const isProd = envMode === 'production'
- const devProxy = Object.fromEntries(
- (['/api', '/mj', '/pg'] as const).map((key) => [
- key,
- { target: serverUrl, changeOrigin: true },
- ]),
- ) as Record<string, { target: string; changeOrigin: boolean }>
- return {
- plugins: [pluginReact()],
- // Rsbuild 2: replaces deprecated `performance.chunkSplit` (RSPack 2 aligned)
- splitChunks: {
- preset: 'default',
- cacheGroups: {
- 'vendor-react': {
- test: /node_modules[\\/](react|react-dom)[\\/]/,
- name: 'vendor-react',
- chunks: 'all',
- priority: 0,
- enforce: true,
- },
- 'vendor-radix': {
- test: /node_modules[\\/]@radix-ui[\\/]/,
- name: 'vendor-radix',
- chunks: 'all',
- priority: 0,
- enforce: true,
- },
- 'vendor-tanstack': {
- test: /node_modules[\\/]@tanstack[\\/]/,
- name: 'vendor-tanstack',
- chunks: 'all',
- priority: 0,
- enforce: true,
- },
- },
- },
- source: {
- entry: {
- index: './src/main.tsx',
- },
- },
- resolve: {
- alias: {
- '@': path.resolve(__dirname, './src'),
- },
- },
- html: {
- template: './index.html',
- },
- server: {
- host: '0.0.0.0',
- proxy: devProxy,
- },
- output: {
- // Production optimizations
- minify: isProd,
- target: 'web',
- distPath: {
- root: 'dist',
- },
- // Rely on Rsbuild default legalComments ("linked" → per-chunk *.LICENSE.txt) in all modes.
- // Do not set "none" in production: that strips minifier-preserved third-party notices and
- // extracted license files, which some distributions require for open-source compliance.
- },
- performance: {
- // Remove console in production
- removeConsole: isProd ? ['log'] : false,
- // Speed up repeated `rsbuild build` (local + CI when node_modules/.cache is preserved).
- // @see https://v2.rsbuild.dev/config/performance/build-cache
- buildCache: {
- cacheDigest: [process.env.VITE_REACT_APP_VERSION],
- },
- },
- tools: {
- rspack: {
- plugins: [
- tanstackRouter({
- target: 'react',
- // Dev: avoid per-route async chunks (reduces white flash on navigation + faster HMR feedback).
- // Prod: keep route-based code splitting.
- autoCodeSplitting: isProd,
- }),
- ],
- },
- },
- }
- })
|