@@ -364,10 +364,19 @@ class MiniCssExtractPlugin {
364
364
}
365
365
) ;
366
366
367
+ const supportsPreload = `(function() {
368
+ try {
369
+ return document.createElement("link").relList.supports("preload");
370
+ } catch(e) {
371
+ return false;
372
+ }
373
+ }());` ;
374
+
367
375
return Template . asString ( [
368
376
source ,
369
377
'' ,
370
378
`// ${ pluginName } CSS loading` ,
379
+ `var supportsPreload = ${ supportsPreload } `
371
380
`var cssChunks = ${ JSON . stringify ( chunkMap ) } ;` ,
372
381
'if(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);' ,
373
382
'else if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {' ,
@@ -388,13 +397,15 @@ class MiniCssExtractPlugin {
388
397
'for(var i = 0; i < existingStyleTags.length; i++) {' ,
389
398
Template . indent ( [
390
399
'var tag = existingStyleTags[i];' ,
400
+ 'if((tag.rel === "stylesheet" || tag.rel === "preload") && (dataHref === href || dataHref === fullhref)) return resolve();' ,
391
401
'var dataHref = tag.getAttribute("data-href");' ,
392
402
'if(dataHref === href || dataHref === fullhref) return resolve();' ,
393
403
] ) ,
394
404
'}' ,
395
405
'var linkTag = document.createElement("link");' ,
396
- 'linkTag.rel = "stylesheet";' ,
406
+ 'linkTag.rel = supportsPreload ? "preload": "stylesheet";' ,
397
407
'linkTag.type = "text/css";' ,
408
+ 'supportsPreload ? linkTag.as = "style" : linkTag.type = "text/css";' ,
398
409
'linkTag.onload = resolve;' ,
399
410
'linkTag.onerror = function(event) {' ,
400
411
Template . indent ( [
@@ -423,7 +434,20 @@ class MiniCssExtractPlugin {
423
434
'head.appendChild(linkTag);' ,
424
435
] ) ,
425
436
'}).then(function() {' ,
426
- Template . indent ( [ 'installedCssChunks[chunkId] = 0;' ] ) ,
437
+ Template . indent ( [
438
+ 'installedCssChunks[chunkId] = 0;' ,
439
+ 'if(supportsPreload) {' ,
440
+ Template . indent ( [
441
+ 'var execLinkTag = document.createElement("link");' ,
442
+ `execLinkTag.href = ${
443
+ mainTemplate . requireFn
444
+ } .p + ${ linkHrefPath } ;`,
445
+ 'execLinkTag.rel = "stylesheet";' ,
446
+ 'execLinkTag.type = "text/css";' ,
447
+ 'document.body.appendChild(execLinkTag);' ,
448
+ ] ) ,
449
+ '}' ,
450
+ ] ) ,
427
451
'}));' ,
428
452
] ) ,
429
453
'}' ,
0 commit comments