@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
JavaScript
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
}
}
});
}