Modülleri ve Bileşenleri Paylaşma
Uzak bir uygulamadaki bileşenleri sunmayı ve bunları ana makine uygulamasında kullanmayı öğrenin.
Modülleri ve Bileşenleri Paylaşma, CoddyKit'te ücretsiz bir Micro Frontends Architecture with Module Federation dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Micro Frontends Architecture with Module Federation öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Micro Frontends Architecture with Module Federation kursu toplamda 4 dersten oluşur.
Bu dersin bazı bölümleri henüz çevrilmemiş olup İngilizce olarak gösterilmektedir.
Intro to Module Sharing
In this lesson, we'll dive into the heart of Micro Frontends: sharing code!
We'll learn how one application can "expose" its components or modules, and how another application can "consume" them. This is key to building truly independent yet collaborative federated apps.
Understanding Exposed Modules
An exposed module is a piece of code (like a React component, a utility function, or even a data store) that one Micro Frontend application decides to make available to other applications.
- Think of it like publishing a library.
- The application making it available is called the Remote Application.
- It's configured within the Remote's Webpack setup.
How a Remote Exposes
To expose a module, you configure the ModuleFederationPlugin in your remote application's webpack.config.js. The exposes property is where the magic happens.
You define a public name for the module and point it to its local path.
const { ModuleFederationPlugin } = require('webpack').container;
module.exports = {
// ... other webpack config ...
plugins: [
new ModuleFederationPlugin({
name: 'remoteApp',
filename: 'remoteEntry.js',
exposes: {
'./Button': './src/components/Button.jsx',
'./Header': './src/components/Header.jsx'
},
shared: ['react', 'react-dom']
})
]
};Example: Our Shared Button
Let's imagine a simple React button component that our remote application wants to share. This component lives in ./src/components/Button.jsx.
It's just a regular React component until we expose it.
// src/components/Button.jsx
import React from 'react';
const Button = ({ onClick, children }) => {
return (
<button
onClick={onClick}
style={{
padding: '10px 20px',
backgroundColor: '#007bff',
color: 'white',
border: 'none',
borderRadius: '5px',
cursor: 'pointer'
}}
>
{children}
</button>
);
};
export default Button;Consuming Remote Modules
On the flip side, a remote module is a module that an application wants to use, but it's hosted by another federated application.
- The application consuming it is called the Host Application.
- The Host needs to know where to find the Remote Application's exposed modules.
How a Host Consumes
The host application also uses the ModuleFederationPlugin. Here, you define the remotes property, mapping a local alias to the remote application's entry point.
The entry point is typically remoteEntry.js, generated by the remote app's Webpack build.
const { ModuleFederationPlugin } = require('webpack').container;
module.exports = {
// ... other webpack config ...
plugins: [
new ModuleFederationPlugin({
name: 'hostApp',
remotes: {
remoteApp: 'remoteApp@http://localhost:3001/remoteEntry.js'
},
shared: ['react', 'react-dom']
})
]
};Importing & Using Shared Components
Once configured, the host application can import the remote component as if it were a local module. Webpack (via Module Federation) handles the dynamic loading from the remote URL.
Try running this simple example:
// This simulates a host app importing a remote component.
// In a real setup, 'remoteApp/Button' would resolve to the
// component exposed by the 'remoteApp' through Module Federation.
import React from 'react';
import ReactDOM from 'react-dom/client';
// Imagine 'remoteApp/Button' is the component we exposed earlier
// This import is resolved by Webpack's Module Federation Plugin
const RemoteButton = React.lazy(() => import('remoteApp/Button'));
function App() {
return (
<div>
<h1>Host Application</h1>
<React.Suspense fallback={<div>Loading Remote Button...</div>}>
<RemoteButton onClick={() => alert('Button Clicked!')}>
Click Me From Remote!
</RemoteButton>
</React.Suspense>
</div>
);
}
// Full entry point for a runnable React app
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<App />);Behind the Scenes: Dynamic Loading
When the host application tries to import remoteApp/Button, Webpack doesn't look for it in the local node_modules. Instead, it uses the remotes configuration to:
- Fetch the
remoteEntry.jsfrom the specified URL. - Load the exposed
Buttonmodule from within that remote entry. - This happens dynamically at runtime, allowing independent deployments!
Best Practices for Sharing
When defining your exposes and remotes, keep these tips in mind:
- Clear Naming: Use descriptive names for your exposed modules (e.g.,
./UserProfileCard). - Consistent Aliases: Ensure your remote aliases in the host are easy to understand (e.g.,
marketingApp). - Relative Paths: Use relative paths (
./src/...) for exposed modules within the remote app.
Test Your Understanding
You've learned how to expose and consume modules. Let's check your understanding of the core configuration!
Lesson Summary & Next Steps
Great job! You've learned the fundamental mechanics of sharing modules with Webpack Module Federation:
- Exposing: Remote apps use
exposesto make components public. - Consuming: Host apps use
remotesto import and use those components. - This dynamic loading allows for independent development and deployment.
Next, we'll build a simple federated application from scratch, putting these concepts into practice!
Sıkça Sorulan Sorular
“Modülleri ve Bileşenleri Paylaşma” dersi ücretsiz mi?
Evet — “Modülleri ve Bileşenleri Paylaşma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Micro Frontends Architecture with Module Federation kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Micro Frontends Architecture with Module Federation kursu toplamda 4 dersten oluşur.
“Modülleri ve Bileşenleri Paylaşma” dersinde ne öğreneceğim?
Uzak bir uygulamadaki bileşenleri sunmayı ve bunları ana makine uygulamasında kullanmayı öğrenin. Micro Frontends Architecture with Module Federation ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Micro Frontends Architecture with Module Federation öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Micro Frontends Architecture with Module Federation, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Modülleri ve Bileşenleri Paylaşma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Micro Frontends Architecture with Module Federation dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Micro Frontends Architecture with Module Federation dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Proje Kurulumu ve Yapılandırması
- Modülleri ve Bileşenleri Paylaşma
- Basit Bir Federasyon Uygulaması Oluşturma
- Birleştirilmiş Uygulamanızı Yerel Olarak Çalıştırma ve Hata Ayıklama