41
loading...
This website collects cookies to deliver better user experience
new ModuleFederationPlugin({
name: 'remote',
filename: 'remoteEntry.js',
exposes: {
'./Welcome': './src/Welcome',
},
shared: [
{
react: { requiredVersion: deps.react, singleton: true },
'react-dom': { requiredVersion: deps['react-dom'], singleton: true },
'@applications-instead-of-libraries/shared-library': {
import: '@applications-instead-of-libraries/shared-library',
requiredVersion: require('../shared-library/package.json').version,
},
'@material-ui/core': {
requiredVersion: deps['@material-ui/core'],
singleton: true,
},
},
],
})
new ModuleFederationPlugin({
name: 'host',
remotes: {
remote: 'remote@http://localhost:3002/remoteEntry.js',
},
shared: [
{
react: { requiredVersion: deps.react, singleton: true },
'react-dom': { requiredVersion: deps['react-dom'], singleton: true },
'@applications-instead-of-libraries/shared-library': {
import: '@applications-instead-of-libraries/shared-library',
requiredVersion: require('../shared-library/package.json').version,
},
'@material-ui/core': {
requiredVersion: deps['@material-ui/core'],
singleton: true,
},
},
],
})
export default class LazyModule extends React.Component {
static getDerivedStateFromError(error) {
return { error }
}
// log error
componentDidCatch(_error, errorInfo) { ... }
render() {
if (this.state.error !== null) {
const errorFallback = this.props.error
if (React.isValidElement(errorFallback)) {
return errorFallback
} else if (typeof errorFallback === 'function') {
return errorFallback({ error: this.state.error })
} else {
return null
}
}
return (
<React.Suspense fallback={this.props.delayed ?? null}>
{this.props.children}
</React.Suspense>
)
}
}
const Context = createContext('')
export const useContext = () => React.useContext(Context)
const WelcomeFrame = () => {
return (
<Context.Provider value="[private]">
<Card variant="outlined">
<CardHeader title="WelcomeFrame"></CardHeader>
<CardContent>
<Welcome />
</CardContent>
</Card>
</Context.Provider>
)
}
context('Integrated Application', () => {
beforeEach(() => {})
it('shows the integrated remote component', () => {
cy.visit('http://localhost:3001')
cy.contains('Host Application').should('exist')
cy.contains('The selected locale is de-DE').should('exist')
})
})
RemoteComponent
handles that.<LanguageProvider value="de-DE">
<Box p={1}>
<RemoteComponent
component="WelcomeFrame"
delayed={<>Loading...</>}
/>
</Box>
</LanguageProvider>