@@ -310,45 +310,6 @@ class JsonpMainTemplatePlugin {
310310 ] ) ;
311311 }
312312 ) ;
313- mainTemplate . hooks . requireEnsure . tap (
314- {
315- name : "JsonpMainTemplatePlugin prefetch" ,
316- stage : 20
317- } ,
318- ( source , chunk , hash ) => {
319- const chunkMap = chunk . getChildIdsByOrdersMap ( ) . prefetch ;
320- if ( ! chunkMap || Object . keys ( chunkMap ) . length === 0 ) return source ;
321- return Template . asString ( [
322- source ,
323- "" ,
324- "// chunk prefetching for javascript" ,
325- "" ,
326- `var chunkPrefetchMap = ${ JSON . stringify ( chunkMap , null , "\t" ) } ` ,
327- "" ,
328- "var chunkPrefetchData = chunkPrefetchMap[chunkId];" ,
329- "if(chunkPrefetchData) {" ,
330- Template . indent ( [
331- "Promise.all(promises).then(function() {" ,
332- Template . indent ( [
333- "var head = document.getElementsByTagName('head')[0];" ,
334- "chunkPrefetchData.forEach(function(chunkId) {" ,
335- Template . indent ( [
336- "if(installedChunks[chunkId] === undefined) {" ,
337- Template . indent ( [
338- "installedChunks[chunkId] = null;" ,
339- mainTemplate . hooks . linkPrefetch . call ( "" , chunk , hash ) ,
340- "head.appendChild(link);"
341- ] ) ,
342- "}"
343- ] ) ,
344- "});"
345- ] ) ,
346- "})"
347- ] ) ,
348- "}"
349- ] ) ;
350- }
351- ) ;
352313 mainTemplate . hooks . requireExtensions . tap (
353314 "JsonpMainTemplatePlugin" ,
354315 ( source , chunk ) => {
@@ -369,6 +330,7 @@ class JsonpMainTemplatePlugin {
369330 ( source , chunk , hash ) => {
370331 if ( needChunkLoadingCode ( chunk ) ) {
371332 const withDefer = needEntryDeferringCode ( chunk ) ;
333+ const chunkMap = chunk . getChildIdsByOrdersMap ( true ) . prefetch ;
372334 return Template . asString ( [
373335 source ,
374336 "" ,
@@ -417,7 +379,34 @@ class JsonpMainTemplatePlugin {
417379 "// run deferred modules when all chunks ready" ,
418380 "return checkDeferredModules();"
419381 ] )
420- : ""
382+ : "" ,
383+ "" ,
384+ "// chunk prefetching for javascript" ,
385+ "" ,
386+ `var chunkPrefetchMap = ${ JSON . stringify ( chunkMap , null , "\t" ) } ` ,
387+ "" ,
388+ "for(let j = 0;j < chunkIds.length; j++) {" ,
389+ Template . indent ( [
390+ "chunkId = chunkIds[j];" ,
391+ "var chunkPrefetchData = chunkPrefetchMap[chunkId];" ,
392+ "if(chunkPrefetchData) {" ,
393+ Template . indent ( [
394+ "var head = document.getElementsByTagName('head')[0];" ,
395+ "chunkPrefetchData.forEach(function(chunkId) {" ,
396+ Template . indent ( [
397+ "if(installedChunks[chunkId] === undefined) {" ,
398+ Template . indent ( [
399+ "installedChunks[chunkId] = null;" ,
400+ mainTemplate . hooks . linkPrefetch . call ( "" , chunk , hash ) ,
401+ "head.appendChild(link);"
402+ ] ) ,
403+ "}"
404+ ] ) ,
405+ "});"
406+ ] ) ,
407+ "}"
408+ ] ) ,
409+ "}"
421410 ] ) ,
422411 "};" ,
423412 withDefer
@@ -479,6 +468,18 @@ class JsonpMainTemplatePlugin {
479468 return source ;
480469 }
481470 ) ;
471+ mainTemplate . hooks . beforeStartup . tap (
472+ "JsonpMainTemplatePlugin" ,
473+ ( source , chunk , hash ) => {
474+ if ( needChunkLoadingCode ( chunk ) ) {
475+ return Template . asString ( [
476+ source ,
477+ `webpackJsonpCallback([${ JSON . stringify ( chunk . ids ) } , {}])`
478+ ] ) ;
479+ }
480+ return source ;
481+ }
482+ ) ;
482483 mainTemplate . hooks . startup . tap (
483484 "JsonpMainTemplatePlugin" ,
484485 ( source , chunk , hash ) => {
0 commit comments