diff --git a/packages/next/build/webpack-config.ts b/packages/next/build/webpack-config.ts index f9b797c65f7f9..91413b2e3ea55 100644 --- a/packages/next/build/webpack-config.ts +++ b/packages/next/build/webpack-config.ts @@ -677,6 +677,9 @@ export default async function getBaseWebpackConfig( 'process.env.__NEXT_EXPORT_TRAILING_SLASH': JSON.stringify( config.exportTrailingSlash ), + 'process.env.__NEXT_PREFETCH_PRELOAD': JSON.stringify( + config.experimental.prefetchPreload + ), 'process.env.__NEXT_DEFER_SCRIPTS': JSON.stringify( config.experimental.deferScripts ), diff --git a/packages/next/client/page-loader.js b/packages/next/client/page-loader.js index de21e09997918..615f1cbe3ddd8 100644 --- a/packages/next/client/page-loader.js +++ b/packages/next/client/page-loader.js @@ -1,9 +1,13 @@ /* global document, window */ import mitt from '../next-server/lib/mitt' +const prefetchOrPreload = process.env.__NEXT_PREFETCH_PRELOAD + ? 'prefetch' + : 'preload' + function supportsPreload(el) { try { - return el.relList.supports('preload') + return el.relList.supports(prefetchOrPreload) } catch { return false } @@ -13,7 +17,7 @@ const hasPreload = supportsPreload(document.createElement('link')) function preloadLink(url, resourceType) { const link = document.createElement('link') - link.rel = 'preload' + link.rel = prefetchOrPreload link.crossOrigin = process.crossOrigin link.href = url link.as = resourceType @@ -217,7 +221,7 @@ export default class PageLoader { // its own deduping mechanism. if ( document.querySelector( - `link[rel="preload"][href^="${url}"], script[data-next-page="${route}"]` + `link[rel="${prefetchOrPreload}"][href^="${url}"], script[data-next-page="${route}"]` ) ) { return