Loading...
Loading...
Compare original and translation side by side
# Core Vite detection
vite --version || npx vite --version
node -v
# Detect Vite configuration and plugins
find . -name "vite.config.*" -type f | head -5
find . -name "vitest.config.*" -type f | head -5
grep -E "vite|@vitejs" package.json || echo "No vite dependencies found"
# Framework integration detection
grep -E "(@vitejs/plugin-react|@vitejs/plugin-vue|@vitejs/plugin-svelte)" package.json && echo "Framework-specific Vite plugins"# Validate configuration
vite build --mode development --minify false --write false
# Fast build test (avoid dev server processes)
npm run build || vite build
# Bundle analysis (if tools available)
command -v vite-bundle-analyzer >/dev/null 2>&1 && vite-bundle-analyzer dist --no-open# Core Vite detection
vite --version || npx vite --version
node -v
# Detect Vite configuration and plugins
find . -name "vite.config.*" -type f | head -5
find . -name "vitest.config.*" -type f | head -5
grep -E "vite|@vitejs" package.json || echo "No vite dependencies found"
# Framework integration detection
grep -E "(@vitejs/plugin-react|@vitejs/plugin-vue|@vitejs/plugin-svelte)" package.json && echo "Framework-specific Vite plugins"# Validate configuration
vite build --mode development --minify false --write false
# Fast build test (avoid dev server processes)
npm run build || vite build
# Bundle analysis (if tools available)
command -v vite-bundle-analyzer >/dev/null 2>&1 && vite-bundle-analyzer dist --no-openimport { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import { resolve } from 'path'
export default defineConfig(({ command, mode }) => {
const config = {
// ESM-optimized build targets
build: {
target: ['es2020', 'edge88', 'firefox78', 'chrome87', 'safari14'],
// Modern output formats
outDir: 'dist',
assetsDir: 'assets',
// Enable CSS code splitting
cssCodeSplit: true,
// Optimize for modern browsers
minify: 'esbuild', // Faster than terser
rollupOptions: {
output: {
// Manual chunking for better caching
manualChunks: {
vendor: ['react', 'react-dom'],
router: ['react-router-dom'],
ui: ['@mui/material', '@emotion/react']
}
}
}
},
// Dependency optimization
optimizeDeps: {
include: [
'react/jsx-runtime',
'react/jsx-dev-runtime',
'react-dom/client'
],
exclude: ['@vite/client'],
// Force re-optimization for debugging
force: false
}
}
if (command === 'serve') {
// Development optimizations
config.define = {
__DEV__: true,
'process.env.NODE_ENV': '"development"'
}
config.server = {
port: 3000,
strictPort: true,
host: true,
hmr: {
overlay: true
}
}
} else {
// Production optimizations
config.define = {
__DEV__: false,
'process.env.NODE_ENV': '"production"'
}
}
return config
})export default defineConfig({
environments: {
// Client-side environment
client: {
build: {
outDir: 'dist/client',
rollupOptions: {
input: resolve(__dirname, 'index.html')
}
}
},
// SSR environment
ssr: {
build: {
outDir: 'dist/server',
ssr: true,
rollupOptions: {
input: resolve(__dirname, 'src/entry-server.js'),
external: ['express']
}
}
}
}
})import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import { resolve } from 'path'
export default defineConfig(({ command, mode }) => {
const config = {
// ESM-optimized build targets
build: {
target: ['es2020', 'edge88', 'firefox78', 'chrome87', 'safari14'],
// Modern output formats
outDir: 'dist',
assetsDir: 'assets',
// Enable CSS code splitting
cssCodeSplit: true,
// Optimize for modern browsers
minify: 'esbuild', // Faster than terser
rollupOptions: {
output: {
// Manual chunking for better caching
manualChunks: {
vendor: ['react', 'react-dom'],
router: ['react-router-dom'],
ui: ['@mui/material', '@emotion/react']
}
}
}
},
// Dependency optimization
optimizeDeps: {
include: [
'react/jsx-runtime',
'react/jsx-dev-runtime',
'react-dom/client'
],
exclude: ['@vite/client'],
// Force re-optimization for debugging
force: false
}
}
if (command === 'serve') {
// Development optimizations
config.define = {
__DEV__: true,
'process.env.NODE_ENV': '"development"'
}
config.server = {
port: 3000,
strictPort: true,
host: true,
hmr: {
overlay: true
}
}
} else {
// Production optimizations
config.define = {
__DEV__: false,
'process.env.NODE_ENV': '"production"'
}
}
return config
})export default defineConfig({
environments: {
// Client-side environment
client: {
build: {
outDir: 'dist/client',
rollupOptions: {
input: resolve(__dirname, 'index.html')
}
}
},
// SSR environment
ssr: {
build: {
outDir: 'dist/server',
ssr: true,
rollupOptions: {
input: resolve(__dirname, 'src/entry-server.js'),
external: ['express']
}
}
}
}
})export default defineConfig({
server: {
// Warm up frequently used files
warmup: {
clientFiles: [
'./src/components/App.jsx',
'./src/utils/helpers.js',
'./src/hooks/useAuth.js'
]
},
// File system optimization
fs: {
allow: ['..', '../shared-packages']
},
// Proxy API calls
proxy: {
'/api': {
target: 'http://localhost:8000',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, ''),
configure: (proxy, options) => {
// Custom proxy configuration
proxy.on('error', (err, req, res) => {
console.log('Proxy error:', err)
})
}
},
'/socket.io': {
target: 'ws://localhost:8000',
ws: true,
changeOrigin: true
}
}
},
// Advanced dependency optimization
optimizeDeps: {
// Include problematic packages
include: [
'lodash-es',
'date-fns',
'react > object-assign'
],
// Exclude large packages
exclude: [
'some-large-package'
],
// Custom esbuild options
esbuildOptions: {
keepNames: true,
plugins: [
// Custom esbuild plugins
]
}
}
})// In application code
if (import.meta.hot) {
// Accept updates to this module
import.meta.hot.accept()
// Accept updates to specific dependencies
import.meta.hot.accept('./components/Header.jsx', (newModule) => {
// Handle specific module updates
console.log('Header component updated')
})
// Custom disposal logic
import.meta.hot.dispose(() => {
// Cleanup before hot update
clearInterval(timer)
removeEventListeners()
})
// Invalidate when dependencies change
import.meta.hot.invalidate()
}export default defineConfig({
server: {
// Warm up frequently used files
warmup: {
clientFiles: [
'./src/components/App.jsx',
'./src/utils/helpers.js',
'./src/hooks/useAuth.js'
]
},
// File system optimization
fs: {
allow: ['..', '../shared-packages']
},
// Proxy API calls
proxy: {
'/api': {
target: 'http://localhost:8000',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, ''),
configure: (proxy, options) => {
// Custom proxy configuration
proxy.on('error', (err, req, res) => {
console.log('Proxy error:', err)
})
}
},
'/socket.io': {
target: 'ws://localhost:8000',
ws: true,
changeOrigin: true
}
}
},
// Advanced dependency optimization
optimizeDeps: {
// Include problematic packages
include: [
'lodash-es',
'date-fns',
'react > object-assign'
],
// Exclude large packages
exclude: [
'some-large-package'
],
// Custom esbuild options
esbuildOptions: {
keepNames: true,
plugins: [
// Custom esbuild plugins
]
}
}
})// In application code
if (import.meta.hot) {
// Accept updates to this module
import.meta.hot.accept()
// Accept updates to specific dependencies
import.meta.hot.accept('./components/Header.jsx', (newModule) => {
// Handle specific module updates
console.log('Header component updated')
})
// Custom disposal logic
import.meta.hot.dispose(() => {
// Cleanup before hot update
clearInterval(timer)
removeEventListeners()
})
// Invalidate when dependencies change
import.meta.hot.invalidate()
}export default defineConfig({
build: {
rollupOptions: {
output: {
// Intelligent chunking strategy
manualChunks: (id) => {
// Vendor libraries
if (id.includes('node_modules')) {
// Separate React ecosystem
if (id.includes('react') || id.includes('react-dom')) {
return 'react-vendor'
}
// UI libraries
if (id.includes('@mui') || id.includes('@emotion')) {
return 'ui-vendor'
}
// Utilities
if (id.includes('lodash') || id.includes('date-fns')) {
return 'utils-vendor'
}
// Everything else
return 'vendor'
}
// Application code splitting
if (id.includes('src/components')) {
return 'components'
}
if (id.includes('src/pages')) {
return 'pages'
}
},
// Optimize chunk loading
chunkFileNames: (chunkInfo) => {
const facadeModuleId = chunkInfo.facadeModuleId
if (facadeModuleId && facadeModuleId.includes('node_modules')) {
return 'vendor/[name].[hash].js'
}
return 'chunks/[name].[hash].js'
}
}
},
// Build performance
target: 'es2020',
minify: 'esbuild',
sourcemap: true,
// Chunk size warnings
chunkSizeWarningLimit: 1000,
// Asset naming
assetsDir: 'static',
// CSS optimization
cssTarget: 'chrome87',
cssMinify: true
}
})export default defineConfig({
build: {
lib: {
entry: resolve(__dirname, 'lib/main.ts'),
name: 'MyLibrary',
fileName: (format) => `my-library.${format}.js`,
formats: ['es', 'cjs', 'umd']
},
rollupOptions: {
// Externalize dependencies
external: [
'react',
'react-dom',
'react/jsx-runtime'
],
output: {
// Global variables for UMD build
globals: {
react: 'React',
'react-dom': 'ReactDOM'
},
// Preserve modules structure for tree shaking
preserveModules: true,
preserveModulesRoot: 'lib'
}
}
}
})export default defineConfig({
build: {
rollupOptions: {
output: {
// Intelligent chunking strategy
manualChunks: (id) => {
// Vendor libraries
if (id.includes('node_modules')) {
// Separate React ecosystem
if (id.includes('react') || id.includes('react-dom')) {
return 'react-vendor'
}
// UI libraries
if (id.includes('@mui') || id.includes('@emotion')) {
return 'ui-vendor'
}
// Utilities
if (id.includes('lodash') || id.includes('date-fns')) {
return 'utils-vendor'
}
// Everything else
return 'vendor'
}
// Application code splitting
if (id.includes('src/components')) {
return 'components'
}
if (id.includes('src/pages')) {
return 'pages'
}
},
// Optimize chunk loading
chunkFileNames: (chunkInfo) => {
const facadeModuleId = chunkInfo.facadeModuleId
if (facadeModuleId && facadeModuleId.includes('node_modules')) {
return 'vendor/[name].[hash].js'
}
return 'chunks/[name].[hash].js'
}
}
},
// Build performance
target: 'es2020',
minify: 'esbuild',
sourcemap: true,
// Chunk size warnings
chunkSizeWarningLimit: 1000,
// Asset naming
assetsDir: 'static',
// CSS optimization
cssTarget: 'chrome87',
cssMinify: true
}
})export default defineConfig({
build: {
lib: {
entry: resolve(__dirname, 'lib/main.ts'),
name: 'MyLibrary',
fileName: (format) => `my-library.${format}.js`,
formats: ['es', 'cjs', 'umd']
},
rollupOptions: {
// Externalize dependencies
external: [
'react',
'react-dom',
'react/jsx-runtime'
],
output: {
// Global variables for UMD build
globals: {
react: 'React',
'react-dom': 'ReactDOM'
},
// Preserve modules structure for tree shaking
preserveModules: true,
preserveModulesRoot: 'lib'
}
}
}
})import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import legacy from '@vitejs/plugin-legacy'
import { visualizer } from 'rollup-plugin-visualizer'
import eslint from 'vite-plugin-eslint'
export default defineConfig({
plugins: [
// React with SWC for faster builds
react({
jsxRuntime: 'automatic',
jsxImportSource: '@emotion/react',
babel: {
plugins: ['@emotion/babel-plugin']
}
}),
// ESLint integration
eslint({
include: ['src/**/*.{ts,tsx,js,jsx}'],
exclude: ['node_modules', 'dist'],
cache: false // Disable in development for real-time checking
}),
// Legacy browser support
legacy({
targets: ['defaults', 'not IE 11'],
additionalLegacyPolyfills: ['regenerator-runtime/runtime']
}),
// Bundle analysis
visualizer({
filename: 'dist/stats.html',
open: process.env.ANALYZE === 'true',
gzipSize: true,
brotliSize: true
})
]
})// vite-plugin-env-vars.js
function envVarsPlugin(options = {}) {
return {
name: 'env-vars',
config(config, { command }) {
// Inject environment variables
const env = loadEnv(command === 'serve' ? 'development' : 'production', process.cwd(), '')
config.define = {
...config.define,
__APP_VERSION__: JSON.stringify(process.env.npm_package_version),
__BUILD_TIME__: JSON.stringify(new Date().toISOString())
}
// Add environment-specific variables
Object.keys(env).forEach(key => {
if (key.startsWith('VITE_')) {
config.define[`process.env.${key}`] = JSON.stringify(env[key])
}
})
},
configureServer(server) {
// Development middleware
server.middlewares.use('/api/health', (req, res) => {
res.setHeader('Content-Type', 'application/json')
res.end(JSON.stringify({ status: 'ok', timestamp: Date.now() }))
})
},
generateBundle(options, bundle) {
// Generate manifest
const manifest = {
version: process.env.npm_package_version,
buildTime: new Date().toISOString(),
chunks: Object.keys(bundle)
}
this.emitFile({
type: 'asset',
fileName: 'manifest.json',
source: JSON.stringify(manifest, null, 2)
})
}
}
}import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import legacy from '@vitejs/plugin-legacy'
import { visualizer } from 'rollup-plugin-visualizer'
import eslint from 'vite-plugin-eslint'
export default defineConfig({
plugins: [
// React with SWC for faster builds
react({
jsxRuntime: 'automatic',
jsxImportSource: '@emotion/react',
babel: {
plugins: ['@emotion/babel-plugin']
}
}),
// ESLint integration
eslint({
include: ['src/**/*.{ts,tsx,js,jsx}'],
exclude: ['node_modules', 'dist'],
cache: false // Disable in development for real-time checking
}),
// Legacy browser support
legacy({
targets: ['defaults', 'not IE 11'],
additionalLegacyPolyfills: ['regenerator-runtime/runtime']
}),
// Bundle analysis
visualizer({
filename: 'dist/stats.html',
open: process.env.ANALYZE === 'true',
gzipSize: true,
brotliSize: true
})
]
})// vite-plugin-env-vars.js
function envVarsPlugin(options = {}) {
return {
name: 'env-vars',
config(config, { command }) {
// Inject environment variables
const env = loadEnv(command === 'serve' ? 'development' : 'production', process.cwd(), '')
config.define = {
...config.define,
__APP_VERSION__: JSON.stringify(process.env.npm_package_version),
__BUILD_TIME__: JSON.stringify(new Date().toISOString())
}
// Add environment-specific variables
Object.keys(env).forEach(key => {
if (key.startsWith('VITE_')) {
config.define[`process.env.${key}`] = JSON.stringify(env[key])
}
})
},
configureServer(server) {
// Development middleware
server.middlewares.use('/api/health', (req, res) => {
res.setHeader('Content-Type', 'application/json')
res.end(JSON.stringify({ status: 'ok', timestamp: Date.now() }))
})
},
generateBundle(options, bundle) {
// Generate manifest
const manifest = {
version: process.env.npm_package_version,
buildTime: new Date().toISOString(),
chunks: Object.keys(bundle)
}
this.emitFile({
type: 'asset',
fileName: 'manifest.json',
source: JSON.stringify(manifest, null, 2)
})
}
}
}undefinedundefined**Solutions:**
1. **Force include problematic packages:** Add to `optimizeDeps.include`
2. **Exclude heavy packages:** Use `optimizeDeps.exclude` for large libraries
3. **Clear cache:** `rm -rf node_modules/.vite && npm run dev`**解决方案:**
1. **强制包含有问题的包:** 添加至`optimizeDeps.include`
2. **排除大型包:** 对大型库使用`optimizeDeps.exclude`
3. **清除缓存:** `rm -rf node_modules/.vite && npm run dev`undefinedundefined**Solutions:**
1. **Configure HMR accept handlers:** Add `import.meta.hot.accept()`
2. **Fix circular dependencies:** Refactor module structure
3. **Enable warmup:** Configure `server.warmup.clientFiles`**解决方案:**
1. **配置HMR接收处理器:** 添加`import.meta.hot.accept()`
2. **修复循环依赖:** 重构模块结构
3. **启用预热:** 配置`server.warmup.clientFiles`undefinedundefined**Solutions:**
1. **Implement code splitting:** Use dynamic imports `import()`
2. **Configure manual chunks:** Optimize `build.rollupOptions.output.manualChunks`
3. **External large dependencies:** Move to CDN or external bundles**解决方案:**
1. **实现代码分割:** 使用动态导入`import()`
2. **配置手动代码块:** 优化`build.rollupOptions.output.manualChunks`
3. **外部化大型依赖:** 迁移至CDN或外部包undefinedundefined**Solutions:**
1. **Configure path aliases:** Set up `resolve.alias` mapping
2. **Add file extensions:** Include in `resolve.extensions`
3. **Fix import paths:** Use consistent relative/absolute paths**解决方案:**
1. **配置路径别名:** 设置`resolve.alias`映射
2. **添加文件扩展名:** 包含至`resolve.extensions`
3. **修复导入路径:** 使用一致的相对/绝对路径undefinedundefined**Solutions:**
1. **Configure SSR environment:** Set up separate client/server builds
2. **Handle client-only code:** Use `import.meta.env.SSR` guards
3. **External server dependencies:** Configure `external` in server build**解决方案:**
1. **配置SSR环境:** 设置独立的客户端/服务端构建
2. **处理客户端专属代码:** 使用`import.meta.env.SSR`防护
3. **外部化服务端依赖:** 在服务端构建中配置`external`undefinedundefined**Solutions:**
1. **Update plugins:** Ensure compatibility with Vite version
2. **Reorder plugins:** Critical plugins first, optimization plugins last
3. **Debug plugin execution:** Add logging to plugin hooks**解决方案:**
1. **更新插件:** 确保与当前Vite版本兼容
2. **调整插件顺序:** 核心插件优先,优化插件最后
3. **调试插件执行:** 为插件钩子添加日志process.envundefinedprocess.envundefined**Solutions:**
1. **Use VITE_ prefix:** Rename env vars to start with `VITE_`
2. **Use import.meta.env:** Replace `process.env` with `import.meta.env`
3. **Configure define:** Add custom variables to `define` config**解决方案:**
1. **使用VITE_前缀:** 将环境变量重命名为以`VITE_`开头
2. **使用import.meta.env:** 替换`process.env`为`import.meta.env`
3. **配置define:** 向`define`配置中添加自定义变量// Import assets with explicit types
import logoUrl from './logo.png?url' // URL import
import logoInline from './logo.svg?inline' // Inline SVG
import logoRaw from './shader.glsl?raw' // Raw text
import workerScript from './worker.js?worker' // Web Worker
// Dynamic asset imports
const getAsset = (name) => {
return new URL(`./assets/${name}`, import.meta.url).href
}
// CSS modules
import styles from './component.module.css'// Import assets with explicit types
import logoUrl from './logo.png?url' // URL import
import logoInline from './logo.svg?inline' // Inline SVG
import logoRaw from './shader.glsl?raw' // Raw text
import workerScript from './worker.js?worker' // Web Worker
// Dynamic asset imports
const getAsset = (name) => {
return new URL(`./assets/${name}`, import.meta.url).href
}
// CSS modules
import styles from './component.module.css'// vite-env.d.ts
/// <reference types="vite/client" />
interface ImportMetaEnv {
readonly VITE_API_BASE_URL: string
readonly VITE_APP_TITLE: string
readonly VITE_ENABLE_ANALYTICS: string
}
interface ImportMeta {
readonly env: ImportMetaEnv
}
// Asset type declarations
declare module '*.svg' {
import React from 'react'
const ReactComponent: React.FunctionComponent<React.SVGProps<SVGSVGElement>>
export { ReactComponent }
const src: string
export default src
}
declare module '*.module.css' {
const classes: { readonly [key: string]: string }
export default classes
}// vite-env.d.ts
/// <reference types="vite/client" />
interface ImportMetaEnv {
readonly VITE_API_BASE_URL: string
readonly VITE_APP_TITLE: string
readonly VITE_ENABLE_ANALYTICS: string
}
interface ImportMeta {
readonly env: ImportMetaEnv
}
// Asset type declarations
declare module '*.svg' {
import React from 'react'
const ReactComponent: React.FunctionComponent<React.SVGProps<SVGSVGElement>>
export { ReactComponent }
const src: string
export default src
}
declare module '*.module.css' {
const classes: { readonly [key: string]: string }
export default classes
}// Performance analysis configuration
export default defineConfig({
build: {
rollupOptions: {
output: {
// Analyze bundle composition
manualChunks: (id) => {
if (id.includes('node_modules')) {
// Log large dependencies
const match = id.match(/node_modules\/([^/]+)/)
if (match) {
console.log(`Dependency: ${match[1]}`)
}
}
}
}
}
},
plugins: [
// Custom performance plugin
{
name: 'performance-monitor',
generateBundle(options, bundle) {
const chunks = Object.values(bundle).filter(chunk => chunk.type === 'chunk')
const assets = Object.values(bundle).filter(chunk => chunk.type === 'asset')
console.log(`Generated ${chunks.length} chunks and ${assets.length} assets`)
// Report large chunks
chunks.forEach(chunk => {
if (chunk.code && chunk.code.length > 100000) {
console.warn(`Large chunk: ${chunk.fileName} (${chunk.code.length} bytes)`)
}
})
}
}
]
})// Performance analysis configuration
export default defineConfig({
build: {
rollupOptions: {
output: {
// Analyze bundle composition
manualChunks: (id) => {
if (id.includes('node_modules')) {
// Log large dependencies
const match = id.match(/node_modules\/([^/]+)/)
if (match) {
console.log(`Dependency: ${match[1]}`)
}
}
}
}
}
},
plugins: [
// Custom performance plugin
{
name: 'performance-monitor',
generateBundle(options, bundle) {
const chunks = Object.values(bundle).filter(chunk => chunk.type === 'chunk')
const assets = Object.values(bundle).filter(chunk => chunk.type === 'asset')
console.log(`Generated ${chunks.length} chunks and ${assets.length} assets`)
// Report large chunks
chunks.forEach(chunk => {
if (chunk.code && chunk.code.length > 100000) {
console.warn(`Large chunk: ${chunk.fileName} (${chunk.code.length} bytes)`)
}
})
}
}
]
})// Step-by-step CRA migration
export default defineConfig({
// 1. Replace CRA scripts
plugins: [react()],
// 2. Configure public path
base: process.env.PUBLIC_URL || '/',
// 3. Handle environment variables
define: {
'process.env.REACT_APP_API_URL': JSON.stringify(process.env.VITE_API_URL),
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV)
},
// 4. Configure build output
build: {
outDir: 'build',
sourcemap: true
},
// 5. Handle absolute imports
resolve: {
alias: {
src: resolve(__dirname, 'src')
}
}
})// Step-by-step CRA migration
export default defineConfig({
// 1. Replace CRA scripts
plugins: [react()],
// 2. Configure public path
base: process.env.PUBLIC_URL || '/',
// 3. Handle environment variables
define: {
'process.env.REACT_APP_API_URL': JSON.stringify(process.env.VITE_API_URL),
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV)
},
// 4. Configure build output
build: {
outDir: 'build',
sourcemap: true
},
// 5. Handle absolute imports
resolve: {
alias: {
src: resolve(__dirname, 'src')
}
}
})// packages/app/vite.config.js
export default defineConfig({
// Resolve shared packages
resolve: {
alias: {
'@shared/ui': resolve(__dirname, '../shared-ui/src'),
'@shared/utils': resolve(__dirname, '../shared-utils/src')
}
},
// Optimize shared dependencies
optimizeDeps: {
include: [
'@shared/ui',
'@shared/utils'
]
},
// Server configuration for workspace
server: {
fs: {
allow: [
resolve(__dirname, '..'), // Allow parent directory
resolve(__dirname, '../shared-ui'),
resolve(__dirname, '../shared-utils')
]
}
}
})// packages/app/vite.config.js
export default defineConfig({
// Resolve shared packages
resolve: {
alias: {
'@shared/ui': resolve(__dirname, '../shared-ui/src'),
'@shared/utils': resolve(__dirname, '../shared-utils/src')
}
},
// Optimize shared dependencies
optimizeDeps: {
include: [
'@shared/ui',
'@shared/utils'
]
},
// Server configuration for workspace
server: {
fs: {
allow: [
resolve(__dirname, '..'), // Allow parent directory
resolve(__dirname, '../shared-ui'),
resolve(__dirname, '../shared-utils')
]
}
}
})defineConfig()commandmodedefineConfig()commandmodeserver.warmup.clientFilesserver.fs.allowchangeOriginrewriteimport.meta.hot.accept()server.warmup.clientFilesserver.fs.allowchangeOriginrewriteimport.meta.hot.accept()