From 36db88dab3fea36f463316dc196900a6a4f28073 Mon Sep 17 00:00:00 2001 From: CarGDev Date: Tue, 1 Jul 2025 22:26:34 -0400 Subject: [PATCH] feat: add vite module federation support --- pre-files/vite.config.js | 7 ++++++- src/setup/devDeps.js | 1 + src/setup/init.js | 4 ++++ src/setup/moduleFederation.js | 31 +++++++++++++++++++++++++++++++ 4 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 src/setup/moduleFederation.js diff --git a/pre-files/vite.config.js b/pre-files/vite.config.js index ccf9066..0466183 100644 --- a/pre-files/vite.config.js +++ b/pre-files/vite.config.js @@ -1 +1,6 @@ -import { defineConfig } from 'vite';\nimport react from '@vitejs/plugin-react';\n\nexport default defineConfig({\n plugins: [react()],\n}); +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; + +export default defineConfig({ + plugins: [react()], +}); diff --git a/src/setup/devDeps.js b/src/setup/devDeps.js index 72d8caa..13a11e4 100644 --- a/src/setup/devDeps.js +++ b/src/setup/devDeps.js @@ -2,6 +2,7 @@ const devDeps = [ 'pretty-quick', 'vite', '@vitejs/plugin-react', + '@originjs/vite-plugin-federation', 'husky', 'dotenv', '@commitlint/config-conventional', diff --git a/src/setup/init.js b/src/setup/init.js index 76725b6..a8dbc81 100644 --- a/src/setup/init.js +++ b/src/setup/init.js @@ -10,6 +10,7 @@ const { setupZustand } = require('./zustand'); const { setupStyles } = require('./styles'); const { setupGit } = require('./gitInit'); const { setupTesting } = require('./testing'); +const { setupModuleFederation } = require('./moduleFederation'); const { createAtomicStructure } = require('../templates/atomicStructure'); const { updatePackageJson } = require('../templates/packageJson'); const { askUserWhereToOpen } = require('../utils/logging'); @@ -56,6 +57,9 @@ async function initProject(projectDirectory, userInput, options) { } setupStyles(userInput.styling); setupTesting(userInput.testingFramework); + if (userInput.useModuleFederation) { + setupModuleFederation(); + } // Create atomic design structure createAtomicStructure(); diff --git a/src/setup/moduleFederation.js b/src/setup/moduleFederation.js new file mode 100644 index 0000000..a4cb002 --- /dev/null +++ b/src/setup/moduleFederation.js @@ -0,0 +1,31 @@ +const { execSync } = require('child_process'); +const fs = require('fs'); +const path = require('path'); +const ora = require('ora'); + +function setupModuleFederation() { + const spinner = ora('🔗 Setting up Module Federation...').start(); + try { + execSync('npm install --save-dev @originjs/vite-plugin-federation', { stdio: 'inherit' }); + + const configPath = path.resolve('vite.config.js'); + let config = fs.readFileSync(configPath, 'utf8'); + + if (!config.includes('@originjs/vite-plugin-federation')) { + const importLine = "import federation from '@originjs/vite-plugin-federation';\n"; + config = importLine + config; + config = config.replace(/plugins:\s*\[(.*?)\]/s, (match, p1) => { + const plugins = p1.trim(); + return `plugins: [${plugins ? plugins + ', ' : ''}federation({})]`; + }); + fs.writeFileSync(configPath, config); + } + + spinner.succeed('🔗 Module Federation configured.'); + } catch (error) { + spinner.fail('❌ Failed to set up Module Federation.'); + console.error(error); + } +} + +module.exports = { setupModuleFederation };