Lab 10: Module Federation
Overview
Step 1: Module Federation Overview
Module Federation allows apps to share code at runtime:
- Host app: consumes exposed modules from remotes
- Remote app: exposes modules for hosts to consume
- Shared: common packages (React, etc.) loaded once
Type challenge:
Host app imports remote module → TypeScript has no types!
Solution: @module-federation/typescript or ambient declarationsStep 2: Webpack Module Federation Config
// webpack.config.js (Remote App — "checkout")
const { ModuleFederationPlugin } = require('webpack').container;
module.exports = {
plugins: [
new ModuleFederationPlugin({
name: 'checkout',
filename: 'remoteEntry.js',
exposes: {
'./CheckoutForm': './src/components/CheckoutForm',
'./CartSummary': './src/components/CartSummary',
'./useCart': './src/hooks/useCart',
},
shared: {
react: { singleton: true, requiredVersion: '^18.0.0' },
'react-dom': { singleton: true, requiredVersion: '^18.0.0' },
},
}),
// Auto-generate TypeScript types for exposed modules
new FederatedTypesPlugin({
federationConfig: {
name: 'checkout',
exposes: { './CheckoutForm': './src/components/CheckoutForm' },
},
}),
],
};
// webpack.config.js (Host App — "shell")
new ModuleFederationPlugin({
name: 'shell',
remotes: {
checkout: 'checkout@http://localhost:3001/remoteEntry.js',
},
shared: { react: { singleton: true } },
}),Step 3: Ambient Module Declarations
Step 4: Type-Safe Dynamic Import
Step 5: import type and verbatimModuleSyntax
import type and verbatimModuleSyntaxStep 6: Declaration Maps for Source Navigation
Step 7: @module-federation/typescript Automation
Step 8: Capstone — Ambient Declaration Verification
Summary
Problem
Solution
Tooling
Last updated
