我正在尝试使用延迟加载的应用程序设置,只会在您导航时加载所需的内容。我正在使用webpack的codesplitting与require.ensures和react-router,但我遇到了问题(或误解)。我的2条路线需要('lodash'),但它被下载两次,每次需要一次。确保。这里运行:https://examples-bqxmpefrny.now.sh/huge-apps/这里是实际的提交github.com/ryankshaw/react-router/commit/a97d77f(我也在webpack 2.1.0-beta.25中尝试过它仍然无法正常工作就像我认为应该github.com/ryankshaw/react-router/commit/9396830)
我需要做什么才能下载“抢夺”一次?或者这只是webpack不能做的事情?
换句话说,webpack没有按照我的想法行事。如果你需要2个不同的require.ensure中的大模块,它会将它捆绑到每个块中,这意味着浏览器最终会下载该模块的代码两次。我希望它足够聪明,可以将2个require.ensures之间共享的模块拆分为自己的块,并将其加载到与需要它的2个分裂点块中的任何一个并行。有没有办法让webpack这样做?这被认为是一个错误吗?
注意:我不想只使用commonsChunkPlugin,因为即使该模块在2个分支点之间共享,我也不想将它放在commons块中并在每个页面上加载它(想象一个大型应用程序比lodash更大的依赖关系,即使应用程序的不同部分使用模块,强制应用程序的绝大多数其他部分下载该文件也是浪费的。并且你可以在同一个地方有多个分割点使用模块的页面)
答案 0 :(得分:0)
同样的问题已经讨论here,他们想出了一个名为AgressiveMergePlugin的插件,它可以帮助您避免两次下载图书馆。
想象一个比lodash具有更大依赖性的大型应用程序, 即使应用程序的不同部分使用该模块,它也会 浪费强迫你的应用程序的绝大多数其他部分 下载该文件
对于上面引用的声明,您可以使用具有Tree-shaking功能的Webpack版本> = 2.0来仅捆绑require
d或import
ed模块/导出。