Skip to content

Commit de61945

Browse files
author
jgillespie
committed
SupportsPreload incorporated
1 parent 4087a1a commit de61945

File tree

2 files changed

+17
-9
lines changed

2 files changed

+17
-9
lines changed

dist/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ class MiniCssExtractPlugin {
253253
},
254254
contentHashType: MODULE_TYPE
255255
});
256-
return Template.asString([source, '', `// ${pluginName} CSS loading`, `var cssChunks = ${JSON.stringify(chunkMap)};`, 'if(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);', 'else if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {', Template.indent(['promises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {', Template.indent([`var href = ${linkHrefPath};`, `var fullhref = ${mainTemplate.requireFn}.p + href;`, 'var existingLinkTags = document.getElementsByTagName("link");', 'for(var i = 0; i < existingLinkTags.length; i++) {', Template.indent(['var tag = existingLinkTags[i];', 'var dataHref = tag.getAttribute("data-href") || tag.getAttribute("href");', 'if((tag.rel === "stylesheet" || tag.rel === "preload") && (dataHref === href || dataHref === fullhref)) return resolve();']), '}', 'var existingStyleTags = document.getElementsByTagName("style");', 'for(var i = 0; i < existingStyleTags.length; i++) {', Template.indent(['var tag = existingStyleTags[i];', 'var dataHref = tag.getAttribute("data-href");', 'if(dataHref === href || dataHref === fullhref) return resolve();']), '}', 'var linkTag = document.createElement("link");', 'linkTag.rel = "preload";', 'linkTag.as = "style";', 'linkTag.onload = resolve;', 'linkTag.onerror = function(event) {', Template.indent(['var request = event && event.target && event.target.src || fullhref;', 'var err = new Error("Loading CSS chunk " + chunkId + " failed.\\n(" + request + ")");', 'err.request = request;', 'delete installedCssChunks[chunkId]', 'linkTag.parentNode.removeChild(linkTag)', 'reject(err);']), '};', 'linkTag.href = fullhref;', crossOriginLoading ? Template.asString([`if (linkTag.href.indexOf(window.location.origin + '/') !== 0) {`, Template.indent(`linkTag.crossOrigin = ${JSON.stringify(crossOriginLoading)};`), '}']) : '', 'var head = document.getElementsByTagName("head")[0];', 'head.appendChild(linkTag);']), '}).then(function() {', Template.indent(['var execLinkTag = document.createElement("link");', `execLinkTag.href = ${mainTemplate.requireFn}.p + ${linkHrefPath};`, 'execLinkTag.rel = "stylesheet";', 'execLinkTag.type = "text/css";', 'document.body.appendChild(execLinkTag);', 'installedCssChunks[chunkId] = 0;']), '}));']), '}']);
256+
return Template.asString([source, '', `// ${pluginName} CSS loading`, 'var supportsPreload = (function() { try { return document.createElement("link").relList.supports("preload"); } catch(e) { return false; }}());', `var cssChunks = ${JSON.stringify(chunkMap)};`, 'if(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);', 'else if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {', Template.indent(['promises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {', Template.indent([`var href = ${linkHrefPath};`, `var fullhref = ${mainTemplate.requireFn}.p + href;`, 'var existingLinkTags = document.getElementsByTagName("link");', 'for(var i = 0; i < existingLinkTags.length; i++) {', Template.indent(['var tag = existingLinkTags[i];', 'var dataHref = tag.getAttribute("data-href") || tag.getAttribute("href");', 'if((tag.rel === "stylesheet" || tag.rel === "preload") && (dataHref === href || dataHref === fullhref)) return resolve();']), '}', 'var existingStyleTags = document.getElementsByTagName("style");', 'for(var i = 0; i < existingStyleTags.length; i++) {', Template.indent(['var tag = existingStyleTags[i];', 'var dataHref = tag.getAttribute("data-href");', 'if(dataHref === href || dataHref === fullhref) return resolve();']), '}', 'var linkTag = document.createElement("link");', 'linkTag.rel = "supportsPreload ? "preload": "stylesheet";', 'console.log("supportsPreload: ", supportsPreload);', 'supportsPreload ? linkTag.as = "style" : linkTag.type = "text/css";', 'linkTag.onload = resolve;', 'linkTag.onerror = function(event) {', Template.indent(['var request = event && event.target && event.target.src || fullhref;', 'var err = new Error("Loading CSS chunk " + chunkId + " failed.\\n(" + request + ")");', 'err.request = request;', 'delete installedCssChunks[chunkId]', 'linkTag.parentNode.removeChild(linkTag)', 'reject(err);']), '};', 'linkTag.href = fullhref;', crossOriginLoading ? Template.asString([`if (linkTag.href.indexOf(window.location.origin + '/') !== 0) {`, Template.indent(`linkTag.crossOrigin = ${JSON.stringify(crossOriginLoading)};`), '}']) : '', 'var head = document.getElementsByTagName("head")[0];', 'head.appendChild(linkTag);']), '}).then(function() {', Template.indent(['installedCssChunks[chunkId] = 0;', 'if(supportsPreload) {', Template.indent(['var execLinkTag = document.createElement("link");', `execLinkTag.href = ${mainTemplate.requireFn}.p + ${linkHrefPath};`, 'execLinkTag.rel = "stylesheet";', 'execLinkTag.type = "text/css";', 'document.body.appendChild(execLinkTag);']), '}']), '}));']), '}']);
257257
}
258258
return source;
259259
});

src/index.js

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,7 @@ class MiniCssExtractPlugin {
327327
source,
328328
'',
329329
`// ${pluginName} CSS loading`,
330+
'var supportsPreload = (function() { try { return document.createElement("link").relList.supports("preload"); } catch(e) { return false; }}());',
330331
`var cssChunks = ${JSON.stringify(chunkMap)};`,
331332
'if(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);',
332333
'else if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {',
@@ -352,8 +353,9 @@ class MiniCssExtractPlugin {
352353
]),
353354
'}',
354355
'var linkTag = document.createElement("link");',
355-
'linkTag.rel = "preload";',
356-
'linkTag.as = "style";',
356+
'linkTag.rel = "supportsPreload ? "preload": "stylesheet";',
357+
'console.log("supportsPreload: ", supportsPreload);',
358+
'supportsPreload ? linkTag.as = "style" : linkTag.type = "text/css";',
357359
'linkTag.onload = resolve;',
358360
'linkTag.onerror = function(event) {',
359361
Template.indent([
@@ -382,12 +384,18 @@ class MiniCssExtractPlugin {
382384
]),
383385
'}).then(function() {',
384386
Template.indent([
385-
'var execLinkTag = document.createElement("link");',
386-
`execLinkTag.href = ${mainTemplate.requireFn}.p + ${linkHrefPath};`,
387-
'execLinkTag.rel = "stylesheet";',
388-
'execLinkTag.type = "text/css";',
389-
'document.body.appendChild(execLinkTag);',
390-
'installedCssChunks[chunkId] = 0;'
387+
'installedCssChunks[chunkId] = 0;',
388+
'if(supportsPreload) {',
389+
Template.indent([
390+
'var execLinkTag = document.createElement("link");',
391+
`execLinkTag.href = ${
392+
mainTemplate.requireFn
393+
}.p + ${linkHrefPath};`,
394+
'execLinkTag.rel = "stylesheet";',
395+
'execLinkTag.type = "text/css";',
396+
'document.body.appendChild(execLinkTag);',
397+
]),
398+
'}',
391399
]),
392400
'}));',
393401
]),

0 commit comments

Comments
 (0)