由于我的问题有点不同,我有一个不同的解决方案,我寻找了一段时间的答案,但找不到。希望这可以帮助某人。
我的问题是我们有几个应用程序作为核心 UI 中的不同module独立部署。这些必须完全独立部署,才能对其他人产生任何影响。
我的解决方案是通过设置这些 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 客户端框架中加载到react组件中,在我们的例子中,我们在包装器应用程序中使用了主干。bundle.min.js 也位于反向代理后面,但它可以位于任何地方,只需加载它并等待加载完成,loadjs 在这种情况下是完美的。最后一个重要的信息是,销毁组件对于确保良好的用户体验至关重要,因为我们遇到了许多问题。
loadjs.reset();
var subComponent = this.getUI('subComponentWrapperElement').get(0);
ReactDOM.unmountComponentAtNode(subComponent);
所以简而言之,我觉得这比其他答案提供的是一个完全独立的可部署应用程序套件,它可以完全与框架无关。