我正在尝试获得一个延迟加载的应用程序设置,它只在你导航时加载它需要的东西。我使用了webpack的require.ensures和react-router的代码拆分,但我有一个问题(或误解)。我的两个路由需要(‘lodash’),但它被下载了两次,每个require.ensure一次。它在这里运行: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)
我需要做什么才能让它只下载“loash”一次?还是说这就是webpack做不到的事情?
换句话说,webpack没有做我认为会做的事情。如果你在两个不同的require.ensures中需要一个大的模块,它会将它捆绑到每个块中,这意味着浏览器最终会下载该模块的代码两次。我希望它足够智能,可以将在2个require.ensures之间共享的模块拆分成自己的块,并与需要它的2个拆分点块中的任何一个并行加载。有没有办法让webpack做到这一点?这被认为是一个bug吗?
注意:我不想只使用commonsChunkPlugin,因为即使该模块在两个拆分点之间共享,我也不想将其放在commons块中并将其加载到每个页面上(想象一下,一个大型应用程序具有比lodash更大的依赖关系,其中即使应用程序的不同部分使用该模块,强制应用程序的绝大多数其他部分下载该文件也是浪费的。在同一页面上可以有多个使用该模块的拆分点)
发布于 2016-11-15 11:12:30
here也讨论了同样的问题,他们提出了一个名为AgressiveMergePlugin的插件,它将帮助你避免两次下载你的库。
设想一个大型的应用程序,它的依赖关系比lodash要大得多,即使应用程序的不同部分使用该模块,强制应用程序的绝大多数其他部分下载该文件也是浪费的
对于上面引用的语句,您可以使用具有Tree-shaking功能的Webpack版本>= 2.0,该版本仅捆绑require
d或import
ed模块/导出。
https://stackoverflow.com/questions/40599759
复制