由于我的问题有点不同,我有一个不同的解决方案,我寻找了一段时间但找不到答案。希望这可以帮助某人。
我的问题是,我们将多个应用程序独立部署为核心 UI 中的不同模块。这些必须完全独立部署,不会对其他产生任何影响。
我的解决方案是通过设置这些 webpack 属性将子组件应用程序包装为 webpack 库:
libraryTarget: 'umd',
globalObject: 'this',
library: 'SubComponentName'
我认为基于直接访问或通过单独应用程序中的父组件访问应用程序为应用程序提供了 2 个入口点
class Library extends Component {
render() {
return (
< Provider store = {store} >< BrowserRouter>
< App isAccessDirect={this.props && this.props.isAccessDirect || false} roles={this.props.roles}>
</App>
< /BrowserRouter>< /Provider>
)
}
}
class Launcher extends Component {
render() {
return (
ReactDOM.render(
<Library isAccessDirect="true"/>,
document.getElementById('root')
)
)
}
}
构建此应用后,我可以直接在 index.html 中使用
<script>
new Compression.Launcher().render();
</script>
或者,如果您希望按照我的要求通过单独的主机/组件访问应用程序,您可以结合使用 loadjs 和 react。
loadjs(['../sub/component/bundle.min.js'], 'loadSubComponent');
var subComponent = this.getUI('subComponentWrapperElement').get(0);
loadjs.ready('loadSubComponent', function() {
var roles = my.app.roles;
ReactDOM.render(
<SubComponentName.Library roles={roles}></SubComponentName.Library>,
subComponent
);
});
这可以在任何类型的 javascript 客户端框架中加载到反应组件中,在我们的例子中,我们在包装应用程序中使用了主干。 bundle.min.js 也位于反向代理的后面,但它可以位于任何地方,只需将其加载并等待加载完成,这在这种情况下 loadjs 是完美的。最后一点重要的信息是,销毁组件对于确保良好的用户体验至关重要,否则我们会遇到许多问题。
loadjs.reset();
var subComponent = this.getUI('subComponentWrapperElement').get(0);
ReactDOM.unmountComponentAtNode(subComponent);
因此,简而言之,我认为与其他答案相比,它提供的是一套完全独立可部署的应用程序套件,可以完全与框架无关。