<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://www.logicwiki.co.uk.logicmade.com/index.php?action=history&amp;feed=atom&amp;title=Module_federation_with_vite</id>
		<title>Module federation with vite - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://www.logicwiki.co.uk.logicmade.com/index.php?action=history&amp;feed=atom&amp;title=Module_federation_with_vite"/>
		<link rel="alternate" type="text/html" href="https://www.logicwiki.co.uk.logicmade.com/index.php?title=Module_federation_with_vite&amp;action=history"/>
		<updated>2026-09-13T15:38:08Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>https://www.logicwiki.co.uk.logicmade.com/index.php?title=Module_federation_with_vite&amp;diff=2612&amp;oldid=prev</id>
		<title>AliIybar: Created page with &quot;Category:Bookitforme Category:vite Category:React  == Create the apps == &lt;pre&gt; bun create vite host --template react-ts bun create vite client-a --template react-t...&quot;</title>
		<link rel="alternate" type="text/html" href="https://www.logicwiki.co.uk.logicmade.com/index.php?title=Module_federation_with_vite&amp;diff=2612&amp;oldid=prev"/>
				<updated>2026-03-10T11:32:47Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;&lt;a href=&quot;/index.php?title=Category:Bookitforme&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Category:Bookitforme (page does not exist)&quot;&gt;Category:Bookitforme&lt;/a&gt; &lt;a href=&quot;/index.php?title=Category:Vite&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Category:Vite (page does not exist)&quot;&gt;Category:vite&lt;/a&gt; &lt;a href=&quot;/Category:React&quot; title=&quot;Category:React&quot;&gt;Category:React&lt;/a&gt;  == Create the apps == &amp;lt;pre&amp;gt; bun create vite host --template react-ts bun create vite client-a --template react-t...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Category:Bookitforme]]&lt;br /&gt;
[[Category:vite]]&lt;br /&gt;
[[Category:React]]&lt;br /&gt;
&lt;br /&gt;
== Create the apps ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bun create vite host --template react-ts&lt;br /&gt;
bun create vite client-a --template react-ts&lt;br /&gt;
bun create vite client-b --template react-ts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Add vite-plugin-federations&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd host&lt;br /&gt;
bun add -d @originjs/vite-plugin-federation&lt;br /&gt;
&lt;br /&gt;
cd ../client-a&lt;br /&gt;
bun add -d @originjs/vite-plugin-federation&lt;br /&gt;
&lt;br /&gt;
cd ../client-b&lt;br /&gt;
bun add -d @originjs/vite-plugin-federation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Remote App (client-a) ==&lt;br /&gt;
client-a/vite.config.ts&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import { defineConfig } from &amp;quot;vite&amp;quot;&lt;br /&gt;
import react from &amp;quot;@vitejs/plugin-react&amp;quot;&lt;br /&gt;
import federation from &amp;quot;@originjs/vite-plugin-federation&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export default defineConfig({&lt;br /&gt;
  plugins: [&lt;br /&gt;
    react(),&lt;br /&gt;
    federation({&lt;br /&gt;
      name: &amp;quot;client_a&amp;quot;,&lt;br /&gt;
      filename: &amp;quot;remoteEntry.js&amp;quot;,&lt;br /&gt;
      exposes: {&lt;br /&gt;
        &amp;quot;./Button&amp;quot;: &amp;quot;./src/Button.tsx&amp;quot;,&lt;br /&gt;
      },&lt;br /&gt;
      shared: [&amp;quot;react&amp;quot;, &amp;quot;react-dom&amp;quot;],&lt;br /&gt;
    }),&lt;br /&gt;
  ],&lt;br /&gt;
  build: {&lt;br /&gt;
    target: &amp;quot;esnext&amp;quot;,&lt;br /&gt;
    minify: false,&lt;br /&gt;
  },&lt;br /&gt;
  server: {&lt;br /&gt;
    port: 5001,&lt;br /&gt;
  },&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
client-a/src/Button.tsx&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export default function Button() {&lt;br /&gt;
  return (&lt;br /&gt;
    &amp;lt;button style={{ padding: 10 }}&amp;gt;&lt;br /&gt;
      Client A Button&lt;br /&gt;
    &amp;lt;/button&amp;gt;&lt;br /&gt;
  )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
client-a/src/main.tsx&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import React from &amp;quot;react&amp;quot;&lt;br /&gt;
import ReactDOM from &amp;quot;react-dom/client&amp;quot;&lt;br /&gt;
&lt;br /&gt;
function App() {&lt;br /&gt;
  return &amp;lt;h2&amp;gt;Client A running&amp;lt;/h2&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ReactDOM.createRoot(document.getElementById(&amp;quot;root&amp;quot;)!).render(&amp;lt;App /&amp;gt;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Remote App (client-b) ==&lt;br /&gt;
client-b/vite.config.ts&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import { defineConfig } from &amp;quot;vite&amp;quot;&lt;br /&gt;
import react from &amp;quot;@vitejs/plugin-react&amp;quot;&lt;br /&gt;
import federation from &amp;quot;@originjs/vite-plugin-federation&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export default defineConfig({&lt;br /&gt;
  plugins: [&lt;br /&gt;
    react(),&lt;br /&gt;
    federation({&lt;br /&gt;
      name: &amp;quot;client_b&amp;quot;,&lt;br /&gt;
      filename: &amp;quot;remoteEntry.js&amp;quot;,&lt;br /&gt;
      exposes: {&lt;br /&gt;
        &amp;quot;./Card&amp;quot;: &amp;quot;./src/Card.tsx&amp;quot;,&lt;br /&gt;
      },&lt;br /&gt;
      shared: [&amp;quot;react&amp;quot;, &amp;quot;react-dom&amp;quot;],&lt;br /&gt;
    }),&lt;br /&gt;
  ],&lt;br /&gt;
  build: {&lt;br /&gt;
    target: &amp;quot;esnext&amp;quot;,&lt;br /&gt;
    minify: false,&lt;br /&gt;
  },&lt;br /&gt;
  server: {&lt;br /&gt;
    port: 5002,&lt;br /&gt;
  },&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
client-b/src/Card.tsx&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export default function Card() {&lt;br /&gt;
  return (&lt;br /&gt;
    &amp;lt;div style={{ border: &amp;quot;1px solid black&amp;quot;, padding: 10 }}&amp;gt;&lt;br /&gt;
      Client B Card&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Host App ==&lt;br /&gt;
host/vite.config.ts&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import { defineConfig } from &amp;quot;vite&amp;quot;&lt;br /&gt;
import react from &amp;quot;@vitejs/plugin-react&amp;quot;&lt;br /&gt;
import federation from &amp;quot;@originjs/vite-plugin-federation&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export default defineConfig({&lt;br /&gt;
  plugins: [&lt;br /&gt;
    react(),&lt;br /&gt;
    federation({&lt;br /&gt;
      name: &amp;quot;host&amp;quot;,&lt;br /&gt;
      remotes: {&lt;br /&gt;
        client_a: &amp;quot;http://localhost:5001/assets/remoteEntry.js&amp;quot;,&lt;br /&gt;
        client_b: &amp;quot;http://localhost:5002/assets/remoteEntry.js&amp;quot;,&lt;br /&gt;
      },&lt;br /&gt;
      shared: [&amp;quot;react&amp;quot;, &amp;quot;react-dom&amp;quot;],&lt;br /&gt;
    }),&lt;br /&gt;
  ],&lt;br /&gt;
  server: {&lt;br /&gt;
    port: 5000,&lt;br /&gt;
  },&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Host React App ===&lt;br /&gt;
host/src/App.tsx&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import React, { Suspense } from &amp;quot;react&amp;quot;&lt;br /&gt;
&lt;br /&gt;
const RemoteButton = React.lazy(() =&amp;gt; import(&amp;quot;client_a/Button&amp;quot;))&lt;br /&gt;
const RemoteCard = React.lazy(() =&amp;gt; import(&amp;quot;client_b/Card&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
export default function App() {&lt;br /&gt;
  return (&lt;br /&gt;
    &amp;lt;div&amp;gt;&lt;br /&gt;
      &amp;lt;h1&amp;gt;Host App&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;Suspense fallback=&amp;quot;Loading Button...&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;RemoteButton /&amp;gt;&lt;br /&gt;
      &amp;lt;/Suspense&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;Suspense fallback=&amp;quot;Loading Card...&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;RemoteCard /&amp;gt;&lt;br /&gt;
      &amp;lt;/Suspense&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TypeScript Declarations (Important) ==&lt;br /&gt;
host/src/remote.d.ts&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
declare module &amp;quot;client_a/Button&amp;quot;&lt;br /&gt;
declare module &amp;quot;client_b/Card&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Without this, TypeScript complains.&lt;br /&gt;
== Run Everything with Bun ==&lt;br /&gt;
terminal 1&lt;br /&gt;
 cd client-a&lt;br /&gt;
 bun run dev&lt;br /&gt;
terminal 2&lt;br /&gt;
 cd client-b&lt;br /&gt;
 bun run dev&lt;br /&gt;
terminal 3&lt;br /&gt;
 cd host&lt;br /&gt;
 bun run dev&lt;/div&gt;</summary>
		<author><name>AliIybar</name></author>	</entry>

	</feed>