シンプルなFederatedアプリの構築
Module Federationを使って、基本的に動作するMicro Frontendアプリケーションの例を開発します。
「シンプルなFederatedアプリの構築」はCoddyKit上の無料Micro Frontends Architecture with Module Federationレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはMicro Frontends Architecture with Module Federation学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Micro Frontends Architecture with Module Federationコースには全4レッスンが含まれています。
このレッスンの一部はまだ翻訳されておらず、英語で表示されています。
Our First Federated App
Welcome to building your first Micro Frontend application! In previous lessons, we learned about setting up Webpack for Module Federation and the core concepts of exposing and consuming modules.
Now, we'll bring those concepts together to build a basic, runnable example. Our goal is to create a Host Application that consumes a simple Button component from a separate Remote Application.
Remote App: The Component
First, let's create a simple React component in our Remote Application that we intend to share. This will be a basic button.
Imagine this component lives in src/components/MyButton.js within your remote project.
import React from 'react';
const MyButton = () => {
return (
<button style={{
padding: '10px 15px',
backgroundColor: '#61dafb',
color: 'white',
border: 'none',
borderRadius: '5px',
cursor: 'pointer'
}}>
Remote Button
</button>
);
};
export default MyButton;Remote App: Entry Point
This is the main entry file for our Remote Application. It will render its own content and also make the MyButton component available for exposure.
This code represents src/index.js in your Remote App.
import React from 'react';
import ReactDOM from 'react-dom';
import MyButton from './components/MyButton';
const App = () => {
return (
<div style={{ padding: '20px', border: '2px dashed #61dafb', margin: '10px' }}>
<h2>Remote App Content</h2>
<p>This part is rendered directly by the Remote App.</p>
<MyButton />
<p>The button above is our shared component.</p>
</div>
);
};
ReactDOM.render(<App />, document.getElementById('root'));Remote App: Webpack Exposing
To make MyButton available to other applications, we configure the Remote App's webpack.config.js using the ModuleFederationPlugin. We specify its name, the filename for its manifest, and the exposes property.
const { ModuleFederationPlugin } = require('webpack').container;
module.exports = {
// ... other webpack configuration
plugins: [
new ModuleFederationPlugin({
name: 'remoteApp',
filename: 'remoteEntry.js',
exposes: {
'./MyButton': './src/components/MyButton',
},
shared: {
react: { singleton: true, requiredVersion: '^17.0.2' },
'react-dom': { singleton: true, requiredVersion: '^17.0.2' },
},
}),
],
};Host App: Main Structure
Now, let's look at our Host Application. Initially, it's a standard React application. We'll modify its main entry file (src/index.js) to consume the remote component.
import React from 'react';
import ReactDOM from 'react-dom';
const App = () => {
return (
<div style={{ padding: '20px', border: '2px solid #50b0ff', margin: '10px' }}>
<h2>Host Application Content</h2>
<p>This content is rendered by the Host App.</p>
{/* The remote button will appear below this text */}
</div>
);
};
ReactDOM.render(<App />, document.getElementById('root'));Host App: Webpack Consuming
The Host App's webpack.config.js needs to know about the Remote App. We use the remotes property within ModuleFederationPlugin to define the remote and its entry file URL.
Remember to adjust the http://localhost:8081 URL to where your remote application is actually served.
const { ModuleFederationPlugin } = require('webpack').container;
module.exports = {
// ... other webpack configuration
plugins: [
new ModuleFederationPlugin({
name: 'hostApp',
remotes: {
remoteApp: 'remoteApp@http://localhost:8081/remoteEntry.js', // Adjust port if needed
},
shared: {
react: { singleton: true, requiredVersion: '^17.0.2' },
'react-dom': { singleton: true, requiredVersion: '^17.0.2' },
},
}),
],
};Host App: Loading Remote Component
With the Webpack configuration in place, we can now dynamically import and render the MyButton component from our Remote App into the Host App. We use React's lazy and Suspense for this.
This code updates src/index.js in your Host App.
import React, { Suspense } from 'react';
import ReactDOM from 'react-dom';
// Dynamically import the remote component
const RemoteMyButton = React.lazy(() => import('remoteApp/MyButton'));
const App = () => {
return (
<div style={{ padding: '20px', border: '2px solid #50b0ff', margin: '10px' }}>
<h2>Host Application Content</h2>
<p>This content is rendered by the Host App.</p>
<Suspense fallback={<div>Loading Remote Button...</div>}>
<RemoteMyButton />
</Suspense>
<p>The button above is loaded from the Remote App!</p>
</div>
);
};
ReactDOM.render(<App />, document.getElementById('root'));Running Both Applications
To see your federated application in action, you need to run both the Remote and Host applications concurrently. Each application will typically have its own development server.
- Step 1: Start the Remote App
Navigate to your Remote App's directory in a terminal and runnpm start(or similar command). - Step 2: Start the Host App
Open another terminal, navigate to your Host App's directory, and runnpm start. - Step 3: Open the Host App
Access the Host App's URL in your browser (e.g.,http://localhost:8080if that's its port).
Verify the Integration
When you open the Host App in your browser, you should see:
- Content rendered directly by the Host Application.
- A 'Loading Remote Button...' fallback message briefly.
- The 'Remote Button' component, visually styled and provided entirely by the Remote Application, appearing within the Host App's layout.
This demonstrates a basic, yet powerful, example of Module Federation in action!
Federated App Check
Let's check your understanding of building a simple federated app.
Recap: Federated Success!
Congratulations! You've successfully built a basic Micro Frontend application using Module Federation.
- We defined a component in a Remote App.
- Configured the Remote App's Webpack to expose that component.
- Set up the Host App's Webpack to consume from the remote.
- Used React's
lazyandSuspenseto dynamically load the remote component.
This foundational example opens the door to creating more complex, independently deployable Micro Frontends!
AI チューターと学ぶ JavaScript — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 12
- レッスン
- 48
よくある質問
「シンプルなFederatedアプリの構築」レッスンは無料ですか?
はい。「シンプルなFederatedアプリの構築」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Micro Frontends Architecture with Module Federationコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Micro Frontends Architecture with Module Federationコースには全4レッスンが含まれています。
「シンプルなFederatedアプリの構築」で何を学びますか?
Module Federationを使って、基本的に動作するMicro Frontendアプリケーションの例を開発します。 ブラウザで直接実行するハンズオンコードでMicro Frontends Architecture with Module Federationを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Micro Frontends Architecture with Module Federationを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのMicro Frontends Architecture with Module Federationは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「シンプルなFederatedアプリの構築」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このMicro Frontends Architecture with Module Federationレッスンでコードを書いて実行できますか?
はい。すべてのMicro Frontends Architecture with Module Federationレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- プロジェクトのセットアップと設定
- モジュールとコンポーネントの共有
- シンプルなFederatedアプリの構築
- フェデレーテッドアプリのローカル実行とデバッグ