1e9ff8a0de
- migrate the classic frontend from Vite to Rsbuild with JSX, Semi UI, proxy, and production build config. - update make dev-web to run both default and classic frontends for local theme switching. - fix classic public page height, footer, CORS proxy, error handling, and constant export warnings. - update Dockerfile and release workflow to install from the web workspace root with the shared lockfile.
107 lines
2.7 KiB
TypeScript
Vendored
107 lines
2.7 KiB
TypeScript
Vendored
import path from 'path'
|
|
import { createRequire } from 'module'
|
|
import { fileURLToPath } from 'url'
|
|
import { defineConfig, loadEnv } from '@rsbuild/core'
|
|
import { pluginReact } from '@rsbuild/plugin-react'
|
|
|
|
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
|
const require = createRequire(import.meta.url)
|
|
const semiUiDir = path.resolve(
|
|
path.dirname(require.resolve('@douyinfe/semi-ui')),
|
|
'../..',
|
|
)
|
|
|
|
export default defineConfig(({ envMode }) => {
|
|
const env = loadEnv({ mode: envMode, prefixes: ['VITE_'] })
|
|
const clientServerUrl =
|
|
process.env.VITE_REACT_APP_SERVER_URL ||
|
|
env.rawPublicVars.VITE_REACT_APP_SERVER_URL ||
|
|
''
|
|
const proxyServerUrl =
|
|
clientServerUrl ||
|
|
'http://localhost:3000'
|
|
const isProd = envMode === 'production'
|
|
const devProxy = Object.fromEntries(
|
|
(['/api', '/mj', '/pg'] as const).map((key) => [
|
|
key,
|
|
{ target: proxyServerUrl, changeOrigin: true },
|
|
]),
|
|
) as Record<string, { target: string; changeOrigin: boolean }>
|
|
|
|
return {
|
|
plugins: [pluginReact()],
|
|
source: {
|
|
entry: {
|
|
index: './src/index.jsx',
|
|
},
|
|
define: {
|
|
'import.meta.env.VITE_REACT_APP_SERVER_URL': JSON.stringify(
|
|
clientServerUrl,
|
|
),
|
|
},
|
|
},
|
|
resolve: {
|
|
alias: {
|
|
'@': path.resolve(__dirname, './src'),
|
|
'@douyinfe/semi-ui/dist/css/semi.css': path.resolve(
|
|
semiUiDir,
|
|
'dist/css/semi.css',
|
|
),
|
|
},
|
|
},
|
|
html: {
|
|
template: './index.html',
|
|
},
|
|
server: {
|
|
host: '0.0.0.0',
|
|
strictPort: true,
|
|
proxy: devProxy,
|
|
},
|
|
output: {
|
|
minify: isProd,
|
|
target: 'web',
|
|
distPath: {
|
|
root: 'dist',
|
|
},
|
|
},
|
|
performance: {
|
|
removeConsole: isProd ? ['log'] : false,
|
|
buildCache: {
|
|
cacheDigest: [process.env.VITE_REACT_APP_VERSION],
|
|
},
|
|
},
|
|
tools: {
|
|
rspack: {
|
|
module: {
|
|
rules: [
|
|
{
|
|
test: /src[\\/].*\.js$/,
|
|
type: 'javascript/auto',
|
|
use: [
|
|
{
|
|
loader: 'builtin:swc-loader',
|
|
options: {
|
|
jsc: {
|
|
parser: {
|
|
syntax: 'ecmascript',
|
|
jsx: true,
|
|
},
|
|
transform: {
|
|
react: {
|
|
runtime: 'automatic',
|
|
development: !isProd,
|
|
refresh: !isProd,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
},
|
|
},
|
|
}
|
|
})
|