UNPKG

@gulibs/vgrove-core

Version:

VGrove CLI - A unified development tool for React applications with auto-routes and i18n

74 lines (73 loc) 2.59 kB
import { defineConfig as defineViteConfig } from 'vite'; import react from '@vitejs/plugin-react-swc'; import autoRoutes from '@gulibs/vgrove-autoroutes'; import i18n from '@gulibs/vgrove-i18n'; import path from 'path'; import fs from 'fs'; function isPackageInstalled(packageName, root) { try { const packageJsonPath = path.resolve(root, 'package.json'); if (!fs.existsSync(packageJsonPath)) { return false; } const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8')); const dependencies = packageJson.dependencies || {}; const devDependencies = packageJson.devDependencies || {}; return !!(dependencies[packageName] || devDependencies[packageName]); } catch { return false; } } export async function createViteConfig(groveConfig) { const { vgrove, vite = {} } = groveConfig; const plugins = [ react(), // Auto Routes Plugin autoRoutes(vgrove.routes), // i18n Plugin i18n(vgrove.i18n) ]; // Auto-detect HeroUI usage or use explicit configuration const shouldUseHeroUI = vgrove.ui.framework === 'heroui' || (vgrove.ui.framework === 'none' && isPackageInstalled('@heroui/react', groveConfig.root) && isPackageInstalled('@tailwindcss/vite', groveConfig.root)); if (shouldUseHeroUI) { // Add Tailwind CSS plugin for HeroUI try { // Use dynamic import to support both ESM and CJS // Use string literal to avoid TypeScript module resolution at compile time const tailwindPlugin = await import('@tailwindcss/vite'.toString()); plugins.push(tailwindPlugin.default()); } catch (error) { // Only show warning if explicitly configured as heroui if (vgrove.ui.framework === 'heroui') { console.warn('HeroUI framework selected but @tailwindcss/vite is not installed'); } } } return defineViteConfig({ ...vite, root: groveConfig.root, plugins: [ ...(vite.plugins || []), ...plugins ], build: { ...vite.build, target: vgrove.build.target, outDir: vgrove.build.outDir, sourcemap: vgrove.build.sourcemap, minify: vgrove.build.minify }, resolve: { ...vite.resolve, alias: { '@': `${groveConfig.root}/src`, ...vite.resolve?.alias } } }); }