如何处理需要的2个分裂点。确保相同的大模块?

时间:2016-11-14 23:46:32

标签: webpack

我正在尝试使用延迟加载的应用程序设置,只会在您导航时加载所需的内容。我正在使用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更大的依赖关系,即使应用程序的不同部分使用模块,强制应用程序的绝大多数其他部分下载该文件也是浪费的。并且你可以在同一个地方有多个分割点使用模块的页面)

1 个答案:

答案 0 :(得分:0)

同样的问题已经讨论here,他们想出了一个名为AgressiveMergePlugin的插件,它可以帮助您避免两次下载图书馆。

  

想象一个比lodash具有更大依赖性的大型应用程序,   即使应用程序的不同部分使用该模块,它也会   浪费强迫你的应用程序的绝大多数其他部分   下载该文件

对于上面引用的声明,您可以使用具有Tree-shaking功能的Webpack版本> = 2.0来仅捆绑require d或import ed模块/导出。