diff --git a/packages/react-server/core/context/Navigator.js b/packages/react-server/core/context/Navigator.js index a2277e59b..6c18c0d7f 100644 --- a/packages/react-server/core/context/Navigator.js +++ b/packages/react-server/core/context/Navigator.js @@ -157,6 +157,7 @@ class Navigator extends EventEmitter { PageUtil.PageConfig.initFromPageWithDefaults(page, { isFragment : false, isRawResponse : false, + preloadJS : false, }); // call page.handleRoute(), and use the resulting code to decide how to diff --git a/packages/react-server/core/renderMiddleware.js b/packages/react-server/core/renderMiddleware.js index 8c28a46cb..9efd6d7a6 100644 --- a/packages/react-server/core/renderMiddleware.js +++ b/packages/react-server/core/renderMiddleware.js @@ -421,6 +421,15 @@ function renderBaseTag(pageObject, res) { }); } +function renderPreloadScripts(scripts, res) { + if (!scripts.length) return; + scripts + .filter(script => script && script.href) + .forEach(script => { + res.write(``); + }); +} + function renderScriptsSync(scripts, res) { // right now, the getXXXScriptFiles methods return synchronously, no promises, so we can render @@ -553,6 +562,10 @@ function renderScripts(pageObject, res) { // there are any non-JS scripts in the whole bunch. var scripts = pageObject.getSystemScripts().concat(pageObject.getScripts()); + if (PageUtil.PageConfig.get('preloadJS')) { + renderPreloadScripts(scripts, res); + } + var thereIsAtLeastOneNonJSScript = scripts.filter( script => script.type && script.type !== "text/javascript" ).length;