为了减少我的应用程序的初始负载,我尝试进行代码分割。例如,我成功地拆分了twilio视频,在用户按“调用”时加载和初始化。
import('twilio-video').then(Video => {
Video.connect(twilioInfo.data.token, options).then(room => {
...
});
});Webpack正确地拆分了代码,并在需要时加载。
现在,我想对组件或路由进行同样的操作(在登录页面上不加载用户profil )。是否有任何相当于
const OtherComponent = React.lazy(() => import('./OtherComponent'));或
const Home = lazy(() => import('./routes/Home'));或者在路由路径被选中时加载组件的任何其他方式?
发布于 2021-05-29 21:35:55
过去很难。这些天来,Webpack模块联合会使它呼吸。
他们有吨样本让你开始工作。例如,基本主机远程示例有一个满足您需要的简单场景。只需将整个Github,cd提取到这个示例中,并运行它(如每个示例的README中所解释的)。
注意“网络”选项卡。除非明确请求,否则不会加载组件。
基本实例
基本主机远程示例有两个独立的包:app1和app2。
app1希望使用来自app2 的组件app2添加到remotes中的它的WMF配置中。app2提供了一个Button组件app2 exposes Button in 它的WMF配置.app1使用动态import请求组件。- E.g., you can do this in a `useEffect`, or a `Route.render` callback etc.app1就可以使用该Button。加载时,它显示一条加载消息,使用Suspense: - Alternatively, instead of using `lazy` and `Suspense`, you can just take the promise returned from the `import(...)` statement and handle the asynchronous loading any way you prefer. Of course, `WMF` is not at all restricted to `react` and can load any module dynamically.
- Note that both, `app1` and `app2` have the same `shared` setup, making sure that those shared dependencies are only loaded one time, and not bundled/duplicated with remotely loaded code:{ // .共享:{dom:{ singleton: true },"react-dom":{ singleton: true },}
注意,WMF动态加载必须使用动态import (即import(...)),因为:
require”不能由webpack捆绑,因为浏览器没有commonjs的概念(除非您使用一些黑客,在这种情况下,您将失去相关的“加载promise")。WMF样本
WMF需要一些学习,但是它的所有示例都有以下共同元素:
webpack.config.js。development模式中,您通常使用集成良好的webpack-dev-server提供所有服务。production模式下,您希望对您的配置进行一些小的调整。当webpack-dev-server不存在时,您的构建只是向您的构建输出添加一些额外的remoteEntry.js文件。shared配置轻松地配置如何处理公共依赖项。(通常您希望它们充当单例,这意味着每个人都应该共享共同的依赖项,而不是打包自己的依赖项。)expose并将自己的(独立的)组件添加到自己的remotes中即可。不确定它是否有效,但值得一试。最后一句话
再次,这将需要一点学习曲线,但我发现这是绝对值得的。感觉就像我见过的最复杂的动态构建+加载系统之一。
最令人烦恼的是,WMF目前在Webpack页面上仍然没有适当的API文档,但我相信它很快就会出现。目前,只有一个不是所有的抛光概念说明的收集。
这位WMF作者本人就是承诺尽快提供更好的文件™️。
幸运的是,对于学习,样本真的很好,积极维护和仍然在增强。
https://stackoverflow.com/questions/67621187
复制相似问题