yongningfu/webpa_ensure

关于webpack的一点疑惑

Opened this issue · 1 comments

刚看了博主写的这篇文章。

不知道博主有没有考虑这样一种情况:

假如在workA-async.jsworkB-async.js文件中都依赖了common-c.js,但是我不想将这个common-c.js打包到entry chunk当中,我想将这个common-c.js单独打包成一个文件,来进行异步加载, 只有触发workA-async.js或者workB-async.js的时候才会去请求这个文件,并执行.

这种情况下webpack应该怎么去配置呢?

@CommanderXL 是个不错的问题。 首先 common-c.js如果之前没有同步require的话,它是不会把它打包到 entry chunk中的,它会分别打包到 workA-async.js 和 workB-async.js中(这里会重复打包, 但是模块的id一样,所以会有个common-c.js模块缓存的问题,如果先下载workA-async.js,再下载workB-async.js,在workA-async.js中require("common-c.js"的话)执行建立模块的代码,和建立common-c.js的缓存对象,workB-async.js里面再去require(""common-c.js"的话,会直接从这个缓存中获取common-c.js对象,而不会执行模块的代码),如果想更加精度的控制的话,可以把common-c.js进行异步抽离, 即用两个 require.ensure, 第一个对 common-c.js进行ensure 第二个对 workA-async.js或者workB-async.js进行ensure, 如果我请求workA-async.js的话,这样浏览器会发两个请求,先加载common-c.js,再加载workA-async.js(),接着再请求加载workB-async.js的话,本来浏览器需要重复请求两次,但是由于之前请求了common-c.js,所以不会再请求它,只会请求workB-async.js. 我会把这份内容加进入,谢谢你的支持